无向图查环(包括自环)

 

 1 #include <bits/stdc++.h>
 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 3 #define pb push_back
 4 #define maxn 100
 5 using namespace std;
 6 
 7 vector<int> m[maxn];
 8 int vis[maxn];
 9 
10 void addnode(int i,int j)
11 {
12     m[i].pb(j);m[j].pb(i);
13 }
14 
15 bool dfs(int i,int pa)
16 {
17     if(vis[i] == 1) return true;//have judged
18     if(vis[i] == -1) return false;//is judging
19     vis[i] = -1;
20     _for(j,0,m[i].size())
21         if(m[i][j]!=pa && !dfs(m[i][j],i))
22             return false;
23     vis[i] = 1;
24     return true;
25 }
26 
27 bool haveRing()
28 {
29     memset(vis,0,sizeof(vis));
30     _for(i,0,maxn)
31         if(!dfs(i,-1))
32             return true;
33     return false;
34 }
35 
36 int main()
37 {
38     addnode(5,1);
39     addnode(1,2);
40     addnode(2,3);
41     addnode(3,4);
42 //    addnode(2,2);
43 //    addnode(2,4);
44     cout << haveRing() << endl;
45     return 0;
46 }

 

posted @ 2018-12-13 18:57  Asurudo  阅读(284)  评论(0编辑  收藏  举报