直接连通图里的环判断有没有,有就是0,没有就是1.然后判环的方式有很多,我写了dfs,因为自己在练习嘛~挺好写的,只要你把你的想法写进dfs即可.
#include <bits/stdc++.h> using namespace std; const int N=1e5+5; vector<int>v[N]; int flag=0; int vis[N]; void dfs(int u,int fa)//判断有没有环. { if(vis[u]) {flag=1;return;} vis[u]=1; for(int i=0;i<v[u].size();i++) { if(v[u][i]==fa) continue; dfs(v[u][i],u); } } int main() { int n,m,ans=0; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { int x,y;scanf("%d%d",&x,&y); v[x].push_back(y); v[y].push_back(x); } for(int i=1;i<=n;i++)//随便选个点当根dfs { if(!vis[i]) { flag=0; dfs(i,0); if(!flag) ans++; } } cout<<ans<<endl; return 0; }
又是一份简洁的代码orz