UVa 10054:The Necklace, 欧拉回路+打印路径

题目链接:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105&page=show_problem&problem=995

题目类型: 欧拉回路

题目:

My little sister had a beautiful necklace made of colorful beads. Two successive beads in the necklace shared a common color at their meeting point. The figure below shows a segment of the necklace:

But, alas! One day, the necklace was torn and the beads were all scattered over the floor. My sister did her best to recollect all the beads from the floor, but she is not sure whether she was able to collect all of them. Now, she has come to me for help. She wants to know whether it is possible to make a necklace using all the beads she has in the same way her original necklace was made and if so in which order the bids must be put.

Please help me write a program to solve the problem.

题目大意翻译:

我的妹妹有一串由各种颜色组成的项链。 项链中两个连续珠子的接头处共享同一个颜色。 如上图, 第一个珠子是green+red,  那么接这个珠子的必须以red开头,如图的red+white.

噢!天啊! 一天, 项链项链被扯断了,珠子掉落了一地。我的妹妹竭尽全力的把珠子一个个捡起来, 但是她不确定是否全部捡回来了。 现在,她叫我帮忙。

她想知道是否可能把这些珠子全部连接起来, 连接的方法和项链原来的方法一样。

请帮我写一个程序解决这个问题。

样例输入:

2
5
1 2
2 3
3 4
4 5
5 6
5
2 1
2 2
3 4
3 1
2 4

样例输出:

Case #1
some beads may be lost

Case #2
2 1
1 3
3 4
4 2
2 2

思路与总结:

这题就是欧拉回路+打印路径,

和UVa 10129 - Play on Words, 欧拉道路 这题很像,

有所不同的是,那题是有向图,而这一题是无向图, 那一题是求欧拉道路,而这一题求的是欧拉回路。

欧拉道路和欧拉回路的区别是, 欧拉回路是要从某一点出发,最后又回到这一点,形成回路。而欧拉道路是从一点出发,到另一个点结束。

打印欧拉回路的方法, 刘汝佳《算法入门经典》P112上有详细介绍:

下面是的递归函数同时适用于欧拉道路和回路。如果需要打印的是欧拉道路,在主程序调用时,参数必须是道路的起点。另外,打印的顺序是你序的,因此真正使用这份

代码时,应当把printf语句替换成一条push语句,把边压入一个栈内。

void euler(int u){
    for(int v=0; v<MAXN; ++v) if(G[u][v]){
        vis[u][v] = vis[v][u] = 1;
        euler(v);
        printf("%d %d\n", u,v);
    }
}

上代码使用于无向图, 如果改成有向图,把vis[u][v] = vis[v][u] = 1改成vis[u][v]= 1即可。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索这题怎么做啊
, 题目
, 一个
, The
v5.6.5
欧拉路径和欧拉回路、欧拉回路、欧拉回路算法、求欧拉回路、欧拉通路和欧拉回路,以便于您获取更多的相关知识。

时间: 2024-12-22 04:36:41

UVa 10054:The Necklace, 欧拉回路+打印路径的相关文章

uva 10054 - The Necklace

点击打开链接uva 10054 思路: 欧拉回路 分析: 1 对于一个无向图来说如果这个图是一个欧拉图,那么必须满足该图是连通的并且每个点的度数都是偶数 2 题目给定n条边的无向图问我们是否是一个欧拉图,是的话输出欧拉图的一条路径 3 首先我们先判断是否所有点的度数都是偶数,然后我们去判断当前图是否是只有一个连通分支,那么这个利用并查集即可 4 如果都满足的话直接去搜索并且输出路径即可 代码: #include<stack> #include<cstdio> #include<

UVa 10596:Morning Walk, 赤裸裸的欧拉回路

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105&page=show_problem&problem=1537 题目类型: 欧拉回路, 并查集, dfs 题目: Kamal is a Motashota guy. He has got a new job in Chittagong. So, he has moved to Chittagong fr

HDU 1385 Minimum Transport Cost:最短路,打印字典序路径

链接: http://acm.hdu.edu.cn/showproblem.php?pid=1385 题目大意: 有N个城市,然后直接给出这些城市之间的邻接矩阵,矩阵中-1代表那两个城市无道路相连,其他值代表路径长度. 如果一辆汽车经过某个城市,必须要交一定的钱(可能是过路费). 现在要从a城到b城,花费为路径长度之和,再加上除起点与终点外所有城市的过路费之和. 求最小花费,如果有多条路经符合,则输出字典序最小的路径. 分析与总结: 1.   这题的关键在于按照字典序输出路径. 假设有 1---

【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径

题目:给定一个二叉树要求打印出所有从根结点到叶子结点路径和为value的路径           例如,给定二叉树如下要求打印出所有和为9的路径,有1->6->3->-1和1->7->4->-3            分析: 1. 要找到所有的路径,利用前序遍历即可做到,我们维护一个数组保存路径上面的点,同时维护一个sum,当到达叶子结点的时候判断是否相等即可 2. 代码 //二叉树结点 struct BinaryTreeNode{ int value; BinaryT

UVa 624 CD (0-1背包)

624 - CD Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=565 You have a long drive by car ahead. You have a tape recorder, but unfortunately your best mus

符合条件在线用户可批量打印电子发票

信息时报讯 (记者 叶静 通讯员 黄静瑜 曾玉贞 张映珍)近日,从广州地税获悉,电子发票在线开票系统已开始新增功能"批量连续打印电子发票",部分需连续批量打印电子发票的纳税人在线开票将更方便.快捷!据悉,"批量连续打印电子发票"功能适用的主要对象为物业管理.学校少年宫等需批量连续打印电子发票的纳税人.纳税人向税务机关 提出申请,税务机关受理文书终审后将取得相应的开具资格.广州地税介绍,符合条件申请开具资格的纳税人,如属于原在线开票用户只需 填写<办理发票事项登

POJ 1077 Eight:八数码问题

题目链接: http://poj.org/problem?id=1077 题目类型: 隐式图搜索 原题: The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've seen it. It is constructed with 15 sliding tiles, each with a number from 1 to 15 on it, and all pac

动态规划(DP)入门

零.先修课程 首先,在开始理解DP的思想前,你需要 1. 完成HDU里面的递推求解专题练习(For Beginner)那7道题(这些题很简单,题解请在博客中搜索),这对你理解DP有很大的帮助. 2. 对递归搜索(比如深度优先搜索,DFS)有一定了解. 一.递归与记忆化搜索 我们从POJ 3176入手来学习这一思想.(题目很短,请快速读完) 从上往下看,最大和值无非是往左走和往右走这两条路的较大者.这样,我们可以写出下面这个重要的递归函数:(这里i表示行,j表示列) int f(int i, in

JAVA学习(八):JAVA文件编程

本博文主要介绍JAVA文件编程,主要包括通过JDK提供的I/O来从文件读取和写入数据.字节流读写文件的方法.字符流读写文件的方法.如何使用File类创建.删除和遍历文件与目录等操作. 不管是C/C++还是JAVA,都可能生成一些持久性数据,我们可以将数据存储在文件或数据库中,但是对于一些简单性的数据,如果存储在数据库中,则会显得有点得不偿失了,那么,如何在JAVA中将数据存储在文件中就成了中小型程序必须掌握的基本技能了. 下面一一讲解File类简介与文件的创建.删除.重命名,文件夹的创建.重命名