明显的欧拉回路,把颜色作为点,建图后,做一遍欧拉回路。不过我是现学的,打印路径上纠结了一下,发现随着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. centos6.5安装vmware-tools

    一.问题描述 为什么使用vmware-tools:传文件方便,可以从主机中直接拖拽文件到centos中(但实际上我们可以用:WinSCP):鼠标切换方便,鼠标指到什么地方,表名当前正在操作哪个环境(但 ...

  2. oracle将两个结果连接后进行查询,得到两个查询的联合结果

    一.需求 用户答题,共3道,必须3题都答完才能提交. 目的:要查询用户答对了几题,答错了几题.(当然此处可以只查答对的题目数,用3减即得答错题的题目数) 二.sql select * ) rightC ...

  3. 项目中的libevent

    单线程libevent模式 项目里面是多线程版的,我先理解下单线程的. //client .调用NGP::init() bool NGP::init(NGPcontext context) { _co ...

  4. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...

  5. new Date()的数据类型的问题

    function getServerNow(){ return new Date(new Date() + svrMinusLocal); } svrMinusLocal是服务器时间减本地时间的时间差 ...

  6. POJ 1734

    #include<iostream> #include<stdio.h> #define MAXN 105 #define inf 123456789 using namesp ...

  7. Ubuntu环境下手动配置ElasticSearch0.90.5

    1 下载elasticsearch-0.90.5 2 修改配置(可选) 修改内存:(可选) bin/elasticsearch.in.sh中: ES_MIN_MEM ES_MAX_MEM 修改搜索引擎 ...

  8. JDK与JRE

    dos命令行中常见的命令: 1.dir:列出当前目录下的文件以及文件夹 2.md:创建目录(即文件夹) |-----C:\>md kkk(在C盘下创建了一个名为kkk的文件夹) 3.rd:删除目 ...

  9. Oracle 体系结构2 - 共享和专用服务器

    1. 怎么查看自己的oracle是共享还是专用服务器 2. 怎么修改设置 3.各有什么优缺点 4.适用环境 对于专用服务器,每一个数据库连接,oracle都会分配一个专门的进程为其服务 oracle@ ...

  10. jvm调优具体参数配置

    3.JVM参数 在JVM启动参数中,可以设置跟内存.垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能.通过设置 ...