hdu 1878 欧拉回路,图的连通性判断
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1878
判断图上是否有欧拉回路,首先要求是连通图,然后每个顶点的度数必须都为偶数(如果存在两个顶点度数为奇数则是存在欧拉通路)
用dfs求连通分支的个数
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; vector<int> G[1000]; bool vis[1000]; void dfs(int u) { vis[u]=1; int d=G[u].size(); for(int i=0;i<d;i++) { int v=G[u][i]; if(!vis[v]) dfs(v); } } int main() { int a,b; int n,m; while(cin>>n>>m) { for(int i=0;i<1000;i++) G[i].clear(); if(n==0) break; memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); G[a].push_back(b); G[b].push_back(a); } int cc=0; for(int i=1;i<=n;i++) { if(!vis[i]) { cc++; if(cc>1) break; dfs(i); } } int bad=0; for(int i=1;i<=n;i++) { if(G[i].size()%2==1) { bad++; break; } } if(bad==0&&cc==1) cout<<1<<endl; else cout<<0<<endl; } }