#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;
}
题目大意:给出一系列数字,要求判断是否能形成欧拉回路,图是无向图
解题思路:先判断是否是一个连通图,再判断一下看是不是欧拉回路,如果是的话,就进行输出