题意:
给出不同颜色的珠子,珠子的两边有两种颜色,串珠子时相邻的珠子颜色要相同。比如12就可以接在32的后面,注意最后一颗珠子要和第一颗珠子要连在一起,也就是说要形成一个回路。
思路:
无脑dfs,因为题目的给出的珠子一定是连通图(不要问我为什么,这是别人告诉我的),所以只要一判定它的每个节点的度都是偶数,(无向欧拉回路形成的条件就是每个点的度要为 偶数)那就可以开始找一条回路,一找到就输出它,毫不犹豫。
#include<iostream>
#include<cstring>
using namespace std;
int ne[55][55];
int po[55];
int t,n,co=0,judge;
void dfs(int u){
for(int v=1;v<51;v++)
if(ne[u][v]){
judge=1;
ne[u][v]--;
ne[v][u]--;
dfs(v);
cout<<v<<' '<<u<<endl;
}
}
int main()
{
scanf("%d",&t);//cin>>t;
while(t--){
scanf("%d",&n);//cin>>n;
memset(po,0,sizeof(po));
memset(ne,0,sizeof(ne));
int u,v,flag=1;
judge=0;
for(int i=0;i<n;i++){
scanf("%d%d",&u,&v);//cin>>u>>v;
po[u]++;
po[v]++;
ne[u][v]++;
ne[v][u]++;
}
printf("Case #%d\n",++co);
for(int i=1;i<=50;i++)
if(po[i]%2){
flag=0;break;
}
if(flag)
for(int i=1;i<=50;i++){
if(judge) break;
dfs(i);
}
else cout<<"some beads may be lost"<<endl;
if(t) cout<<endl;
}
return 0;
}