UVA - 10054 The Necklace

来源:互联网 发布:win系统传文件到mac 编辑:程序博客网 时间:2024/05/23 02:01

#include<cstdio>#include<cstring>int cur[60][60];int dgr[60];int f[60];int find(int x) {return f[x] == x ? x:(f[x] = find(f[x]));}void dfs(int u) {int v;for(int v = 1; v <= 50; v++) {if(cur[u][v]) {cur[u][v]--;cur[v][u]--;dfs(v);printf("%d %d\n",v,u);}}}int main() {int test;int num1, num2;int num;int count = 1;int i , j;scanf("%d",&test);while(test--) {for(i = 1; i <= 50 ; i++)f[i] = i;memset(cur,0,sizeof(cur));memset(dgr,0,sizeof(dgr));scanf("%d",&num);for( i = 0; i < num; i++) {scanf("%d%d",&num1, &num2);dgr[num1]++;dgr[num2]++;cur[num1][num2]++;cur[num2][num1]++;if(find(num1) != find(num2))f[find(num1)] = find(num2);}int mark = 1;for(i = 0; !dgr[i];i++);for( j = i+1; j <= 50; j++)if(dgr[j] && find(i) != find(j)) {mark = 0;break;}if(mark) {for( i = 1; i <= 50; i++) {if(dgr[i] % 2 != 0) {mark = 0;break;}}}printf("Case #%d\n",count++);if(!mark) printf("some beads may be lost\n");else {for(i = 0; !dgr[i];i++);dfs(i);}if(test)printf("\n");}return 0;}

题目大意:给出一系列数字,要求判断是否能形成欧拉回路,图是无向图

解题思路:先判断是否是一个连通图,再判断一下看是不是欧拉回路,如果是的话,就进行输出


0 0
原创粉丝点击