Uva10054 欧拉回路
题意:给n个珠子,每个珠子的两端的颜色不同。问能否组成一条项链,两颗相邻的珠子相邻的两端颜色相同。
思路:把颜色看做点。珠子看做边。每一个珠子在两种颜色之间连边。无向图中任意一点的度数都为偶数,则该图具有欧拉回路。然后通过euler函数来输出即可。
/* ID: onlyazh1 LANG: C++ TASK: The Necklace */ #include<iostream> #include<cmath> #include<stack> #include<queue> #include<cctype> #include<vector> #include<cstring> #include<fstream> #include<iomanip> #include<algorithm> using namespace std; typedef unsigned long long ll; int deg[70]; int G[70][70]; void euler(int u){ for(int i=1;i<=50;i++) if(G[u][i]){ G[u][i]--;G[i][u]--; euler(i); cout<<i<<" "<<u<<endl; } } int main(){ //ifstream cin("in.txt"); int T,n,u,v,icase=0; cin>>T; while(T--){ memset(deg,0,sizeof(deg)); memset(G,0,sizeof(G)); cin>>n; while(n--){ cin>>u>>v; G[u][v]++;G[v][u]++; deg[u]++;deg[v]++; } if(icase) cout<<endl; cout<<"Case #"<<++icase<<endl; bool flag=true; for(int i=1;i<=50;i++) if(deg[i]%2==1){ cout<<"some beads may be lost"<<endl; flag=false;break; } if(flag) euler(u); } return 0; }
时间: 2024-10-13 17:39:25