UVA - 10054 The Necklace
2014-10-19 00:00
330 查看
#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; }
题目大意:给出一系列数字,要求判断是否能形成欧拉回路,图是无向图
解题思路:先判断是否是一个连通图,再判断一下看是不是欧拉回路,如果是的话,就进行输出
相关文章推荐
- UVA - 10054 The Necklace
- The Necklace UVA10054
- UVA 10054 The Necklace(欧拉路)
- uva 10054 The Necklace
- UVA 10054 The Necklace
- UVA 10054 - The Necklace 欧拉回路
- UVa:10054 The Necklace
- UVa 10054 - The Necklace
- UVA 10054 The Necklace (dfs欧拉回路)
- UVa10054 The Necklace,无向图求欧拉回路
- UVA 10054 - The Necklace 欧拉回路
- uva 10054 The Necklace 欧拉回路
- UVa 10054 - The Necklace 欧拉回路
- UVA 10054 The Necklace(euler)
- The Necklace UVA10054
- uva 10054 - The Necklace
- UVA 10054 The Necklace(欧拉回路,打印路径)
- UVA10054 The Necklace(欧拉回路)
- The Necklace UVA10054
- UVA - 10054 - The Necklace (欧拉回路!!)