设为首页 加入收藏

TOP

UVA 10054 The Necklace
2015-07-20 17:47:36 来源: 作者: 【 】 浏览:1
Tags:UVA 10054 The Necklace

题意:

项链散了 每个珠子前端后端分别有颜色 在项链中 相邻的珠子的相邻的那一端颜色相同 问 找到的珠子能不能重新串起一根项链

思路:

比较经典的欧拉回路题 Fleury算法解决问题

代码:

#include
  
   
#include
   
     #include
    
      using namespace std; #define M 60 int n,ans,top,m,t,T; int Edge[M][M],path[M*M],d[M]; struct Stack { int node[M*M]; int top; }s; void dfs(int x) { for(int i=1;i<=n;i++) { if(Edge[i][x]) { Edge[i][x]--; Edge[x][i]--; s.node[++s.top]=i; dfs(i); break; } } } void Fleury(int x) { int i,b; top=0; s.top=0; s.node[0]=x; while(s.top>=0) { b=0; for(i=1;i<=n;i++) { if(Edge[s.node[s.top]][i]) { b=1; break; } } if(b==0) path[top++]=s.node[s.top--]; else dfs(s.node[s.top]); } } int main() { int i,u,v; n=50; scanf("%d",&T); for(t=1;t<=T;t++) { if(t!=1) puts(""); printf("Case #%d\n",t); memset(d,0,sizeof(d)); memset(Edge,0,sizeof(Edge)); scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); d[u]++; d[v]++; Edge[u][v]++; Edge[v][u]++; } for(i=1;i<=n;i++) { if(d[i]%2==1) break; } if(i<=n) { puts("some beads may be lost"); continue; } for(i=1;i<=n;i++) { if(d[i]) break; } Fleury(i); for(i=0;i
     
      

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇NYOJ-sum of all integer numbers 下一篇Codeforces Round #245 (Div. 1)B..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python中文网 - 人生 (2025-12-24 18:49:47)
·【整整648集】这绝对 (2025-12-24 18:49:44)
·Python超详细一条龙 (2025-12-24 18:49:42)
·【超详细】JDK 下载 (2025-12-24 18:19:32)
·Java_百度百科 (2025-12-24 18:19:29)