6_16 单词(UVa10129)<欧拉回路>

考古学家有时候遇到一些神秘的门,这些门需要解开特定的谜题才能打开。因为没有其他方法可以打开门,这谜题对我们来说非常重要。
在门上有许多磁盘,每个盘子上有一个英文单字在上面。这些盘子必须被安排,使得盘子上的每个单字的第一个字母必须与前一个盘子的单字的最后一个字母相同。例如:acm后面可以接motorola。你的任务是写一个程序,读入所有的单字然后判断是否可以做出如上述的安排,如此来能打开门。
Input
输入的第一列有一个整数代表以下有几组测试数据。
每组测试数据的第一列,有一个整数N(1 <= N <= 100000),代表盘子的数目。接下来的N列每列有一个英文单字(最少2个,最长1000个小写字母,同样的单字可能会重复出现),代表这N个盘子上的单字。请参考Sample Input。
Output
对每一组测试数据输出一列。如果可以安排盘子的顺序,使得每个单字的第一个字母与前一个盘子的单字的最后一个字母相同,请输出Ordering is possible.,否则,请输出The door cannot be opened.
请注意:所有的盘子都要被使用到,并且都只能使用一次。

Sample Input 
3
2
acm
ibm
3
acm
malform
mouse
3
dog
cat
dog

Sample Output

The door cannot be opened.
Ordering is possible.
The door cannot be opened.

时间: 2024-10-26 14:46:33

6_16 单词(UVa10129)<欧拉回路>的相关文章

例题6-16 单词 UVa10129

1.题目描述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个单词的右端点和本单词的左端点一样.所以这是一个有向图.根据结论:有向图的底图(忽略边的方向后的图)必须连通:有向图中最多只能有两个端点的入度不等于出度,且必须是其中一点的入度比出度小1,另一点的入度比出度大1.因此先判断端点是否都连通,再判断每个端点的度数是否满足结论即可

Uva10129(欧拉回路)

Play on Words UVA - 10129 Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us. There is a

UVA10129:Play on Words(欧拉回路)

Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to solve it to open that doors. Because there is no other way to open the doors, the puzzle is very important for us. 一些密门会包含有趣的文字谜,考古学家小队为了开门不得不解决它.别无他法,

[题解]UVA10129 Play on Words

链接:http://vjudge.net/problem/viewProblem.action?id=19492 描述:单词接龙 思路:求欧拉回路或欧拉道路. 首先建图,以字母为节点,单词为边.因为单词不可能倒序,所以是有向图. 判断图的连通性,dfs就可以做到,把它当成无向图就好了.然后判断点的出入度就可以判断是不是欧拉回路或者欧拉道路. 下面是我的实现. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstri

Play on Words UVA - 10129 (欧拉回路)

题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N  代表有n个字符串  每个字符串最长1000  要求你把所有的字符串连成一个序列  每个字符串的第一个字母是前一个字符串的最后一个字母 思路:这是学的欧拉回路的第一道题 ,把单词的首字母和尾字母看做结点,单词看作边 ,判断能否找出一条欧拉回路就行了 首先要知道什么是欧拉回路: 第一个条件:图必须是连通的 第二个条件:最多只有两个奇点(出度和入度不相等的点) 满足上面两个条件的就是欧拉回路 如果有

hdu1116 欧拉回路

1 //Accepted 248 KB 125 ms 2 //欧拉回路 3 //以26个字母为定点,一个单词为从首字母到末尾字母的一条边 4 //下面就是有向图判断欧拉回路 5 //连通+节点入度和==出度和 或者 存在一对节点一个入度比出度大1,一个小1 6 #include <cstdio> 7 #include <cstring> 8 #include <iostream> 9 #include <queue> 10 using namespace s

UVa10129 Play on Words (欧拉路径)

链接:http://acm.hust.edu.cn/vjudge/problem/19492分析: 欧拉路径:https://zh.wikipedia.org/wiki/%E4%B8%80%E7%AC%94%E7%94%BB%E9%97%AE%E9%A2%98 只用关注每个单词的首尾字母就够了其它的没有用,从首字母向尾字母连边,看是否能形成一个欧拉路径,用DFS找连通块的方式判断是否是连通图,然后如果每个点的出入度数相等则存在欧拉回路当然就有欧拉路径,否则查看是否存在两个点出入度数不相等,且其中

UVA - 10129 Play on Words(欧拉回路+并查集)

2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个单词的右端点和本单词的左端点一样.所以这是一个有向图.根据结论:有向图的底图(忽略边的方向后的图)必须连通:有向图中最多只能有两个端点的入度不等于出度,且必须是其中一点的入度比出度小1,另一点的入度比出度大1.因此先判断端点是否都连通,再判断每个端点的度数是否满足结论即可. 那么,如何判断连通性呢?

nyoj 单词拼接(并查集判断连通性+欧拉路径)

这题还是比较难的. 首先建图方面,如果单纯的把单词作为点,能拼接的关系作为边,那么就是哈密顿图(每个点仅能走一次),难度比较大. 换一种思路,就是把每个单词看成一条有向边,由该单词的首字母指向尾字母. 那么这题便是欧拉图的问题了. 本质上采用的还是搜索,但是为了快速得到字典序最小的欧拉路径,首先要对单词集进行排序. 排完序后,用边集数组存图:再通过计算各点的出度与入度,同时判断基图(不考虑边的方向的图)的连通性,判断是否存在欧拉回路或欧拉通路. 如果存在欧拉回路,那么就从0开始搜索: 如果存在欧