无向图查环(包括自环)
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 }