有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环。

可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路

首先判断是否在一个联通分量中,在判断是否存在欧拉回路,最后输出欧拉回路。

 #include <stdio.h>
#include <string.h>
const int maxn=;
const int INF=<<;
int mx,mn,p[maxn],d[maxn],G[maxn][maxn];
int find(int x)
{
return p[x]==x?x:(p[x]=find(p[x]));
}
void dfs(int u)
{
for(int v=mn;v<=mx;v++)if(G[u][v]){
--G[u][v];--G[v][u];
dfs(v);
printf("%d %d\n",v,u);
}
}
int main()
{
int t;
scanf("%d",&t);
for(int i=;i<=t;i++){
if(i!=)putchar('\n');
printf("Case #%d\n",i);
int j,n;
scanf("%d",&n);
for(j=;j<=;j++)p[j]=j;
memset(d,,sizeof(d));
memset(G,,sizeof(G));
int x,y;
mn=INF;mx=;
for(j=;j<=n;j++){
scanf("%d%d",&x,&y);
++G[x][y];++G[y][x];
++d[x];++d[y];
if(mn>x)mn=x;if(mn>y)mn=y;
if(mx<x)mx=x;if(mx<y)mx=y;
x=find(x);y=find(y);
if(x!=y)p[x]=y;
}
int tmp=find(mn);
bool ok=;
for(j=mn+;j<=mx;j++)if(d[j] && find(j)!=tmp){
ok=;break;
}
if(ok)
for(j=mn;j<=mx;j++)if(d[j]&){
ok=;break;
}
if(ok){
dfs(mn);
}else{
puts("some beads may be lost");
}
}
return ;
}

最新文章

  1. JS 与OC 交互篇
  2. jquery easyui使用(四)&#183;&#183;&#183;&#183;&#183;&#183;添加,编辑,删除
  3. PADSPCB权威指南-第一章 PADS软件系统(部分)(原创)
  4. Java实现敏感词过滤
  5. Python3 内建模块 hashlib、itertools、HTMLParser、urllib
  6. cocoapods出现Diff: /../Podfile.lock: No such file or directory错误
  7. 循环-10. 求序列前N项和*
  8. GoF 设计模式:浅浅印象
  9. 【Electron】Electron开发入门(三):main process和web page 通信
  10. 使用poi根据模版生成word文档,支持插入数据和图片
  11. 查看变更(git diff)
  12. Spark环境搭建(七)-----------spark的Local和standalone模式启动
  13. STM32学习笔记:【003】GPIO
  14. itext7知识点研究(PDF编辑)
  15. MyBatis持久层框架学习之01 MyBatis的起源和发展
  16. diff命令详解
  17. Loadrunner乱码问题
  18. 第一篇 Python的数据类型
  19. 初步认识dubbo--小案例
  20. SQL查询语句大全集锦

热门文章

  1. ouath原理
  2. Unity学习疑问记录之将图切割保存
  3. php多线程详解
  4. PostGr-SQL 基本概念
  5. WIN7 如何将BAT文件附加到任务栏
  6. 如何使用Google Map API开发Android地图应用
  7. ajax原理和跨域解决方法
  8. Source Insight设置
  9. android studio 2.0 GPU Debugger使用说明
  10. Windows Internal Database Service Pack 4 x64 Edition (KB2463332)安装失败