好可恶一道题,怎么没人告诉我输出之间有空行(
思路是先抽象成图,然后跑一边dfs记录边的前后顺序。
对于不能成环的情况,只需要再开个数组记录度数判断奇点即可。
若存在奇点则break掉,剩下的跑dfs、
//produced by miya555 //stupid mistakes:1.多测要清空 2.输出之间有空行 //ideas:dfs直接搜 #include<bits/stdc++.h> using namespace std; const int N=1010; int t,n,d[N],g[N][N],flag; void euler(int u){ int v; for(v=1;v<=50;v++){ if(g[u][v]){ g[u][v]--; g[v][u]--; euler(v); cout<<v<<' '<<u<<endl; } } } int tmp; int main(){ //int u,v; cin>>t; for(int x=1;x<=t;x++){ memset(d,0,sizeof(d)); memset(g,0,sizeof(g)); cout<<"Case #"<<x<<endl; flag=0; cin>>n; for(int i=1;i<=n;i++){ int u,v; cin>>u>>v; d[u]++; d[v]++; g[u][v]++; g[v][u]++; tmp=u; } for(int i=1;i<=50;i++){ if(d[i]%2==1){ cout<<"some beads may be lost"<<endl; flag=1; break; } } if(!flag) euler(tmp); cout<<"\n"; } return 0; }
标签:int,题解,UVA10054,dfs,++,Necklace From: https://www.cnblogs.com/Miya555/p/17739772.html