【topic】
Input formats:
Output formats:
2
5
1 2
2 3
3 4
4 5
5 6
5
2 1
2 2
3 4
3 1
2 4
【Output】
Case #1
some beads may be lost
Case #2
2 1
1 3
3 4
4 2
2 2
【analysis】
欧拉回路裸题
把每 种颜色看成一个结点,珠子的两端为一条边。
注意在相邻两组输出之间应有一个空行。
[Code]
#include<cstdio>
#include<cstring>
using namespace std;
int g[55][55],d[55];
inline void euler(int u){
for(int v=1;v<=50;v++){
if(g[u][v]){
g[u][v]--;
g[v][u]--;
euler(v);
printf("%d %d\n",v,u);//逆序输出
}
}
}
int main(){
int t,n;
scanf("%d",&t);
for(int k=1;k<=t;k++){
scanf("%d",&n);
memset(g,0,sizeof(g));
memset(d,0,sizeof(d));
for(int i=1;i<=n;i++){
int u,v;
scanf("%d%d",&u,&v);
g[u][v]++;g[v][u]++;
d[u]++;d[v]++;
}
printf("Case #%d\n",k);
int i;
for(i=1;i<=50;i++)
if(d[i]%2)
break;
if(i<=50)
printf("some beads may be lost\n");
else
for(i=1;i<=50;i++)
euler(i);
if(k!=t)
printf("\n");
}
return 0;
}