抓住题中可以转化的信息,使题面变为我们熟悉的类型
将颜色看为点,珠子作为边(由于欧拉图性质)
#include<bits/stdc++.h> using namespace std; int n; //以颜色为点建图,珠子为边建图qwq int G[66][66],ind[66]; int sta; void dfs(int x) {//搜索 for(int i=1;i<=51;i++)//颜色 { if(G[x][i])//没用过的珠子 { G[x][i]--; G[i][x]--; dfs(i); cout<<i<<" "<<x<<endl; } } return ; } bool flag; int t,num; int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { num++; flag=0;//多组数据,记得清零 memset(G,0,sizeof(G)); memset(ind,0,sizeof(ind)); cin>>n; for(int i=1;i<=n;i++) { int q,w; cin>>q>>w; G[q][w]++; G[w][q]++; ind[q]++; ind[w]++; sta=q; } for(int i=1;i<=51;i++) { if(ind[i]&1) { flag=1; break; //判断入度奇偶——存在欧拉回路与否 } } cout<<"Case #"<<num<<endl; if(!flag) dfs(sta); else cout<<"some beads may be lost"<<endl; if(num!=t)//这里特判换行 cout<<endl; } return 0; }