Uva-10054-The Necklace
2013-04-02 12:19
453 查看
这个题就是求宝石是否可以连接成满足要求的项链,要求相连2的2个石头必须为一样的颜色。
其实可以将这个题转化为欧拉路径,即石头2面对应连边。
代码:
其实可以将这个题转化为欧拉路径,即石头2面对应连边。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<queue> #include<stack> using namespace std; const int maxn=51; int w[maxn][maxn],cnt[maxn]; stack<int> x,y; void DFS(int u) { for(int i=0;i<=50;i++) { if(w[u][i]) { w[u][i]--; w[i][u]--; DFS(i); x.push(u); y.push(i); } } } int main() { int T,cas=1; scanf("%d",&T); while(T--) { int n; if(cas>1) printf("\n"); printf("Case #%d\n",cas++); scanf("%d",&n); memset(w,0,sizeof(w)); memset(cnt,0,sizeof(cnt)); for(int i=0;i<n;i++) { int ita,itb; scanf("%d%d",&ita,&itb); w[ita][itb]++; w[itb][ita]++; cnt[ita]++; cnt[itb]++; } int flag=0; for(int i=1;i<=50;i++) if(cnt[i]%2) { flag=1; break; } if(flag) { printf("some beads may be lost\n"); continue; } int flaga=0; for(int i=1;i<=50;i++) { flag=0; for(int j=1;j<=50;j++) { if(w[i][j]) { flag=1; DFS(i); break; } } if(flag) break; } while(!x.empty()) { printf("%d %d\n",x.top(),y.top()); x.pop();y.pop(); } } return 0; }
相关文章推荐
- uva10054 The Necklace (欧拉回路路径输出 (并查集 + DFS) || (DFS + stack))
- (UVa 10054)The Necklace --欧拉回路的判断和输出,DFS
- UVA 10054 - The Necklace 欧拉回路
- PC/UVa 111002/10054 The Necklace
- Uva - 10054 - The Necklace(欧拉回路)
- UVa 10054 - The Necklace 欧拉回路
- UVA - 10054 - The Necklace (欧拉回路!!)
- UVA 10054 - The Necklace
- UVA - 10054 The Necklace
- The Necklace UVA10054
- UVA10054 The Necklace (输出欧拉回路)
- uva 10054 The Necklace
- [UVA 10054]The Necklace[欧拉回路][打印路径]
- UVA10054 The Necklace
- UVA 10054 The Necklace(欧拉回路)
- UVA-10054 The Necklace 欧拉回路
- uva 10054--The Necklace
- UVA 10054 The Necklace(欧拉路)
- uva 10054 - The Necklace
- UVA 10054 The Necklace(euler)