UVa 10054 - The Necklace

来源:互联网 发布:中华书局 知乎 编辑:程序博客网 时间:2024/06/06 09:09

題目:已知一些珠子,珠子由兩個半圓組成,問這些珠子能否拼成一個鏈子,使得不同珠子相鄰的半圓相同。

分析:圖論、歐拉迴路。直接利用dfs求解即可;歐拉迴路存在的條件,所有點的度為偶數(無向圖)。

說明:老是submit error╮(╯▽╰)╭。

#include <cstdlib>#include <cstring>#include <cstdio>int degree[55];int G[55][55];int euler(int v){for (int i = 1; i <= 50; ++ i)if (G[v][i]) {G[v][i] --;G[i][v] --;euler(i);printf("%d %d\n",i,v);}}int main(){int n, t, u, v;while (~scanf("%d",&t)) for (int k = 1; k <= t; ++ k) {scanf("%d",&n);memset(degree, 0, sizeof(degree));memset(G, 0, sizeof(G));for (int i = 0; i < n; ++ i) {scanf("%d%d",&u,&v);G[u][v] ++;G[v][u] ++;degree[u] ++;degree[v] ++;}int flag = 0;for (int i = 1; i <= 50; ++ i) {if (degree[i]%2) {flag = 1;break;}}printf("Case #%d\n",k);if (!flag)euler(v);else printf("some beads may be lost\n");if (k < t) printf("\n");}return 0;}


0 0