欧拉回路
这学期离散里学了欧拉回路
图G的一个回路,若它恰通过G中每条边一次,则称该回路为欧拉回路。
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图
HDU-1878-欧拉回路
http://acm.hdu.edu.cn/showproblem.php?pid=1878
这题判断一个图是否是欧拉回路
#include<stdio.h> #include<string.h> #include<stdlib.h> int n,m; int visit[1002],f[1002]; void init() //并查集判断是否是一个连通图 { int i; for(i=1;i<=n;i++) f[i]=i; } int find(int x) { int r=x; while(f[r]!=r) r=f[r]; f[x]=r; return r; } void Union(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx!=fy) f[fx]=fy; } int main() { int a,b,i; int ans,flag; while(scanf("%d",&n),n) { scanf("%d",&m); memset(visit,0,sizeof(visit)); init(); ans=0; while(m--) { scanf("%d %d",&a,&b); visit[a]++; visit[b]++; Union(a,b); } for(i=1;i<=n;i++) if(f[i]==i) ans++; if(ans==1) //只有一个连通分图 { flag=1; for(i=1;i<=n;i++) if(visit[i]%2==1) { flag=0; break; } if(flag==1) printf("1\n"); else printf("0\n"); } else printf("0\n"); } return 0; }
HDU-3018-Ant Trip
http://acm.hdu.edu.cn/showproblem.php?pid=3018
这题也关于欧拉回路的,和上题有点区别
这道题就是求一个无向图能够最小几笔画的问题,对于每一个连通分图,如果是欧拉回路,一笔可以画成;否则就是奇数次数的点的个数的一半
第一次用向量表示数组
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<vector> using namespace std; int f[100005],hash[100005]; int du[100005],count[100005]; //du为每个节点的次数,count为每个分图奇数次数的点的个数 vector<int> a; int n,m; void init() { int i; a.clear(); memset(hash,0,sizeof(hash)); memset(du,0,sizeof(du)); memset(count,0,sizeof(count)); for(i=1;i<=n;i++) f[i]=i; } int find(int x) { int r=x; while(f[r]!=r) r=f[r]; f[x]=r; return r; } void Union(int x,int y) { int fx,fy; fx=find(x); fy=find(y); if(fx!=fy) f[fx]=fy; } int main() { int a1,a2; int k,i,sum; while(scanf("%d%d",&n,&m)!=EOF) { init(); while(m--) { scanf("%d %d",&a1,&a2); du[a1]++; du[a2]++; Union(a1,a2); } for(i=1;i<=n;i++) { k=find(i); if(!hash[k]) { a.push_back(k); //k为一个连通分图的代表元素 hash[k]=1; } if(du[i]%2==1)//计算奇数次数的点的个数 count[k]++; } sum=0; for(i=0;i<a.size();i++) { k=a[i]; if(du[k]==0) //孤立结点 continue; if(count[k]==0)//欧拉回路一笔即可画成 sum++; else sum+=(count[k]/2);//图中次数为奇数的点一定为偶数个 } printf("%d\n",sum); } return 0; }
posted on 2012-06-28 23:35 java课程设计例子 阅读(351) 评论(0) 编辑 收藏 举报