明显的欧拉回路,把颜色作为点,建图后,做一遍欧拉回路。不过我是现学的,打印路径上纠结了一下,发现随着FindEuler()的递归调用的结束,不断把点压入栈中,从后向前打印,遇到"支路"会先处理好支路再继续的。这样就可以顺序打印路径了。如果是直接打印或放在队列里,会发现打印出来的项链的关系正好相反,即前一行的第一个与本行的第二个颜色相同。

邻接表又开小了,MAXN<<1 。还有就是用STL的栈TLE了,还是手写吧= =

 #include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
using namespace std; const int MAXN=;
const int MAXM=; int sta[MAXM][],top; struct Edge{
int v,next;
int vis;
Edge(){}
Edge(int _v,int _next):v(_v),next(_next),vis(){}
}edge[MAXM<<]; int tol,head[MAXN],E;
int degree[MAXN]; void init()
{
tol=;E=;
memset(head,-,sizeof(head));
memset(degree,,sizeof(degree));
} void add(int u,int v)
{
edge[tol]=Edge(v,head[u]);
head[u]=tol++;
} int FindVertex(){
for(int i=;i<=;i++)
{
if(degree[i])
return i;
}
return -;
} void FindEuler(int u)
{
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].v;
if(!edge[i].vis){
edge[i].vis=edge[i^].vis=; FindEuler(v);
sta[top][]=u;
sta[top++][]=v;
}
}
} bool EulerCircuit()
{
for(int i=;i<=;i++)
if(degree[i]%!=)
return false;
int s=FindVertex();
if(s==-)
return false; top=;
FindEuler(s); if(top!=E)
return false;
return true; } int main()
{
int T,k,n;
int a,b;
scanf("%d",&T);
for(k=;k<=T;k++)
{
scanf("%d",&n); init();
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
add(b,a);
E++;
degree[a]++;
degree[b]++;
} if(k!=)
puts("");
printf("Case #%d\n",k);
if(EulerCircuit()){
while(top!=){
top--;
printf("%d %d\n",sta[top][],sta[top][]);
}
}else
printf("some beads may be lost\n");
}
return ;
}

补充:用邻接表打印字典序最小的回路,应该在建图后对每个adjacency list 排序。

如果在有向图上做欧拉回路,只需把判断偶点改为出入度相等即可。

Euler Trail与Euler Circuit 最多相差一条边(回路本身也是一条迹),所以把判断偶点改为恰有两个奇点或没有奇点即可。

uva 10054 The Necklac(欧拉回路)的更多相关文章

  1. UVA 10054 the necklace 欧拉回路

    有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...

  2. UVa 10054 项链(欧拉回路)

    https://vjudge.net/problem/UVA-10054 题意:有一种由彩色珠子连接成的项链.每个珠子的两半由不同颜色组成.相邻两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要 ...

  3. UVa 10054,欧拉回路

    题目链接:https://uva.onlinejudge.org/external/100/10054.pdf 题目链接:http://vjudge.net/contest/132239#proble ...

  4. UVA 10054 The Necklace(欧拉回路,打印路径)

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. Uva 10054 欧拉回路 打印路径

    看是否有欧拉回路 有的话打印路径 欧拉回路存在的条件: 如果是有向图的话 1.底图必须是连通图 2.最多有两个点的入度不等于出度 且一个点的入度=出度+1 一个点的入度=出度-1 如果是无向图的话 1 ...

  6. UVA 10054 (欧拉回路) The Necklace

    题目:这里 题意:有一种由彩色珠子连接而成的项链,每个珠子两半由不同颜色(由1到50的数字表示颜色)组成,相邻的两个珠子在接触的地方颜色相同,现在有一些零碎的珠子,确认它是否能 复原成完整的项链. 把 ...

  7. UVa 10054 (打印欧拉回路) The Necklace

    将每个颜色看成一个顶点,对于每个珠子在两个颜色之间连一条无向边,然后求欧拉回路. #include <cstdio> #include <cstring> + ; int G[ ...

  8. uva 10054 The Necklace 拼项链 欧拉回路基础应用

    昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...

  9. UVa 10054 The Necklace【欧拉回路】

    题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断 ...

随机推荐

  1. VIM Taglist安装配置和使用

    问题描述:            VIM  Taglist安装于配置 问题解决:             (1)安装Taglist包      (2)解压taglist压缩包         (3)将 ...

  2. Oracle数据库表的备份和数据表的删除操作

    --Oracle数据库中的表备份: --备份语句:在备份之后就可以将这张表的所有数据源删除了,但是之后有人对这张表的数据进行操作,但是在操作完成之后要记得将数据表恢复 CREATE TABLE DZH ...

  3. C#中Json和List/DataSet相互转换

    #region List<T> 转 Json        /// <summary>        /// List<T> 转 Json        /// & ...

  4. PAT-乙级-1050. 螺旋矩阵(25)

    1050. 螺旋矩阵(25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求将给定的N个正整数按非递增的 ...

  5. PE文件结构详解(三)PE导出表

    上篇文章 PE文件结构详解(二)可执行文件头 的结尾出现了一个大数组,这个数组中的每一项都是一个特定的结构,通过函数获取数组中的项可以用RtlImageDirectoryEntryToData函数,D ...

  6. JAVA Hibernate工作原理及为什么要用(转)

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  7. Maintainable HashCode and Equals Using Apache Commons

    Java hashCode and equals methods can be tricky to implement correctly. Fortunately, all majors IDEs ...

  8. What is the Best Programming Language to Learn in 2014?

    It’s been a year since I revealed the best languages to learn in 2013. Once again, I’ve examined the ...

  9. php规范

    PSR-0 自动加载 PSR-1 基本代码规范 PSR-2 代码样式 PSR-3 日志接口

  10. Sina App Engine(SAE)教程(11)- Yaf使用

    Yaf参考资料 Yaf(Yet Another Framework)用户手册 想在SAE使用Yaf? 无需申请,sae环境已经全面支持. Yaf 实战 下面是一个运行在SAE的Yaf的hello wo ...