抓住题中可以转化的信息,使题面变为我们熟悉的类型

将颜色看为点,珠子作为边(由于欧拉图性质)

 

  #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;
  }