zoukankan      html  css  js  c++  java
  • FZU-1924+判断环/DFS/BFS

    dfs:

     1 /*
     2 dfs
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 #include<map>
    11 #include<stack>
    12 #include<set>
    13 #include<math.h>
    14 using namespace std;
    15 typedef long long int64;
    16 //typedef __int64 int64;
    17 typedef pair<int64,int64> PII;
    18 #define MP(a,b) make_pair((a),(b)) 
    19 const int maxn = 1005;
    20 const int inf = 0x7fffffff;
    21 const double pi=acos(-1.0);
    22 const double eps = 1e-8;
    23 
    24 int vis[ maxn ];
    25 struct Edge{
    26     int u,next;
    27 }edge[ maxn<<4 ];
    28 int cnt,head[ maxn ];
    29 void init(){
    30     memset( vis,-1,sizeof( vis ) );
    31     cnt = 0;
    32     memset( head,-1,sizeof( head ) );
    33 }
    34 void addedge( int a,int b ){
    35     edge[ cnt ].u = b;
    36     edge[ cnt ].next = head[ a ];
    37     head[ a ] = cnt++;
    38 }
    39 
    40 bool flag;
    41 int ans;
    42 void dfs( int cur ){
    43     if( flag ) return ;
    44     vis[ cur ] = 1;
    45     for( int i=head[ cur ];i!=-1;i=edge[i].next ){
    46         int nxt = edge[i].u;
    47         if(nxt == ans){
    48             flag = true;
    49             return;
    50         }
    51         if(vis[ nxt ] == 1)continue;
    52         if( flag )return;
    53         dfs( nxt );    
    54     }
    55 }
    56             
    57 
    58 int main(){
    59     int T;
    60     scanf("%d",&T);
    61     int Case = 1;
    62     while( T-- ){
    63         int n,m;
    64         scanf("%d%d",&n,&m);
    65         int edge_a,edge_b;
    66         scanf("%d%d",&edge_a,&edge_b);
    67         int x,y;
    68         init();
    69         while( edge_a-- ){
    70             scanf("%d%d",&x,&y);
    71             x++,y++;
    72             y += n;
    73             addedge( x,y );
    74         }
    75         while( edge_b-- ){
    76             scanf("%d%d",&x,&y);
    77             x++,y++;
    78             x += n;
    79             addedge( x,y );
    80         }
    81         flag = false;
    82 
    83         for( int i=1;i<=n;i++ ){
    84             memset(vis,0,sizeof(vis));
    85             ans = i;
    86             dfs(i);
    87             if(flag)break;
    88             /*
    89             if( flag==false&&vis[i]==-1 ){
    90                 dfs( i,-1 );
    91             }
    92             */
    93         }        
    94         printf("Case %d: ",Case ++ );
    95         if( flag ) printf("Possible
    ");
    96         else printf("Impossible
    ");
    97     }
    98     return 0;
    99 }
    View Code
    keep moving...
  • 相关阅读:
    webpack4系列之 【2. 踩坑--webpack 2.x升级至4.x】
    计算月份差方法封装
    局域网内访问另一台电脑上运行的代码
    npm遇到的问题--npm install 执行报错 /bin/git submodule update -q --init --recursive
    功能说明书
    第一次结对作业
    MathExam
    第一次作业
    2017《Java预备作业》02 计科1501 李晓燕
    2017《Java技术》预备作业 计科1501 李晓燕
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3304673.html
Copyright © 2011-2022 走看看