HDU 1878 欧拉回路
2015-01-29 14:56
253 查看
解题思路:即为满足欧拉回路的两个条件就可以了 (1)是连通图(2)顶点度数为偶数
用并查集写的版本--
用邻接矩阵储存图,用DFS遍历版本--
因为对于一个环,只需深度搜索一遍,则所有的点就已经被标记了,如果还有点没有被标记,那么就说明不构成环,再就是还是要满足顶点的度数为偶数
用并查集写的版本--
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int degree[10010],pre[10010]; int find(int root){ return root == pre[root] ? root : pre[root] = find(pre[root]); } void unionroot(int x,int y) { int root1=find(x); int root2=find(y); if(root1!=root2) pre[root1]=root2; } int main() { int m,n,u,v,i; while(scanf("%d %d",&n,&m)!=EOF&&n) { int flag=1; memset(degree,0,sizeof(degree)); for(i=1;i<=10010;i++) pre[i]=i; for(i=1;i<=m;i++) { scanf("%d %d",&u,&v); degree[u]++; degree[v]++; unionroot(u,v); } for(i=1;i<=n;i++) { if(degree[i]!=2) { flag=0; break; } if(find(i)!=find(n)) { flag=0; break; } } if(flag) printf("1\n"); else printf("0\n"); } }
用邻接矩阵储存图,用DFS遍历版本--
因为对于一个环,只需深度搜索一遍,则所有的点就已经被标记了,如果还有点没有被标记,那么就说明不构成环,再就是还是要满足顶点的度数为偶数
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int d[1005][1005],vis[1005],degree[1005]; void dfs(int u,int n) { int i=1; vis[u]=1; for(i=1;i<=n;i++) { if(d[u][i]&&vis[i]==0) dfs(i,n); } } int main() { int n,m,i,j,ans,u,v,flag; while(scanf("%d %d",&n,&m)!=EOF&&n) { memset(d,0,sizeof(d)); memset(vis,0,sizeof(vis)); memset(degree,0,sizeof(degree)); flag=1; for(i=1;i<=m;i++) { scanf("%d %d",&u,&v); d[u][v]=d[v][u]=1; degree[u]++; degree[v]++; } dfs(1,n); for(i=1;i<=n;i++) { if(vis[i]==0) { flag=0; break; } if(degree[i]%2) { flag=0; break; } } if(flag) printf("1\n"); else printf("0\n"); } }
相关文章推荐
- 浙大复试 HDU 1878 欧拉回路
- HDU 1878 欧拉回路
- HDU 1878 欧拉回路 (并查集+欧拉回路)
- 【欧拉图判断】HDU 1878 欧拉回路
- HDU 1878 欧拉回路
- HDU-1878 欧拉回路 欧拉回路
- HDU_1878 欧拉回路
- HDU 1878 欧拉回路(并查集+欧拉回路)
- HDU 1878 欧拉回路
- HDU:1878 欧拉回路(并查集+欧拉回路)
- hdu-1878(欧拉回路)
- HDU 1878-欧拉回路(简单的欧拉回路判断)
- hdu 1878 欧拉回路 解题报告
- HDU 1878 欧拉回路
- hdu 1878 欧拉回路
- HDU 1878 欧拉回路
- hdu 1878 无向图的欧拉回路
- HDU 1878.欧拉回路
- hdu 1878 欧拉回路
- Hdu 1878 欧拉回路