思路:先分析,特殊的字母,可能有的字母是当开头个数+1=当结尾个数,那么这个字母一定是开头,同理另一个特殊字母就是作为结尾的

之后其余的字母的话只可能是开头=结尾个数,如果有任何一个字母当开头的个数和结尾个数只差为2,那么回路一定不成立!

之后是构建DFS遍历

遍历的思路就是 用G[i][j]表示字母i,j是连通的!

遍历的起点我们分为2个步骤,一个是这个图是个环路

第二个是一条线性图

环路的话从哪里都可以开始遍历

线形图的话最好从开头进行遍历

一直遍历到结尾

之后看有没有没有遍历到的节点

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define LEN 100 + 10
#define MAX_SIZE  1000 + 10
int G[LEN][LEN];
int front[LEN];
int back[LEN];
int vis[LEN];
int dfs(int u)
{vis[u]=1;for(int i=0;i<LEN;i++)if(G[u][i]&&!vis[i])/*如果是连通的话*/{dfs(i);}
}
int main()
{int N;scanf("%d",&N);for(int cases=1;cases<=N;cases++){int n,ok=1;scanf("%d",&n);memset(front,0,sizeof(front));memset(back,0,sizeof(back));memset(G,0,sizeof(G));memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){char word[MAX_SIZE];scanf("%s",word);int L=strlen(word);G[word[0]-'0'][word[L-1]-'0']++;front[word[0]-'0']++;back[word[L-1]-'0']++;}int num1=0,num2=0;for(int i=0;i<LEN;i++){if(front[i]!=back[i]){if(front[i]==back[i]+1)num1++;else if(front[i]+1==back[i])num2++;else{ok=0;break;}}}if(num1&&num2&&num1+num2>2)ok=0;if(ok){/*开头和结尾只能有一个*//*开始遍历!*/int ok1=0;int ok2=0;for(int i=0;i<LEN;i++){if(num1==0&&num2==0&&front[i]){/*如果是一个回路的图*/dfs(i);break;}else if(front[i]>back[i]){dfs(i);break;}}num1=0;num2=0;for(int i=0;i<LEN;i++){if(!vis[i]&&front[i]){ok=0;break;}if(!vis[i]&&back[i]){ok=0;break;}}if(ok) printf("Ordering is possible.\n");else printf("The door cannot be opened.\n");}else printf("The door cannot be opened.\n");}return 0;
}


Play on Words-uva 精短欧拉回路相关推荐

  1. UVa 10596 - Morning Walk, 赤裸裸的欧拉回路

    10596 - Morning Walk 3791 37.43% 1073 89.84% 题目链接: http://uva.onlinejudge.org/index.php?option=com_o ...

  2. UVA 10054 the necklace 欧拉回路

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

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

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

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

    题目链接:https://vjudge.net/problem/UVA-10129 题目大意:输入N  代表有n个字符串  每个字符串最长1000  要求你把所有的字符串连成一个序列  每个字符串的第 ...

  5. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  6. 欧拉道路 和 欧拉回路

    经典的七桥问题:是否存在一条路线,可以不重复的走遍7座桥. 转化为图就是,是否存在一条路线,可以不重复地走遍所有边. 所以在欧拉道路中,"进"和"出"是相对应的 ...

  7. UVA 10054 项链

    欧拉回路: 如果连通图中顶点的入度全部为偶数则欧拉回路存在 参考:http://blog.sina.com.cn/s/blog_6f846a6e0100vzdo.html 注意欧拉回路的打印技巧 下面 ...

  8. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  9. [模板][持续更新]欧拉回路与欧拉路径浅析

    Luogu P2731 骑马修栅栏 Riding the Fences 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与 ...

最新文章

  1. python文件替换一行_python基础_文件操作实现全文或单行替换的方法
  2. MethodBase.GetCurrentMethod 方法
  3. python flask Blueprint搭建
  4. Vue刷新当前页面几种方式
  5. wp8.1 页面返回 页面导航
  6. alter 弹出添加图片_解决PS保存JPG图片内存很大的方法(二)
  7. 【九度OJ1522】|【剑指offer21】包含min函数的栈
  8. 解决microsoft visual c++ build tools安装包丢失或损坏
  9. QQ音乐下载的flac文件转码mp3文件
  10. 【LaTeX】下载及安装步骤
  11. c语言编程 双斜杠报错怎么办,以双斜杠//开头的URL的含义
  12. 如果身处历史,你会怎么选?-- 舍不得读完的中国史
  13. linux samba yum,CentOS7下yum安装SAMBA全命令过程
  14. 修改linux编译配置文件,Porting:linux内核编译、配置、修改配置文件、添加.c文件到内核...
  15. cobaltstrike域前置
  16. 网页文档下载不了怎么办 亲测可用!建议收藏!
  17. 在LINUX如何用键盘复制,粘贴
  18. List多条件组合排序
  19. CS61-仅使用正则表达式匹配罗马数字|Python一对一学员答疑贴
  20. mysql安装 防火墙,mysql8 参考手册--安装或卸载MySQL企业防火墙

热门文章

  1. 解决npm安装bootstrap 4 报错问题
  2. Python数据分析与案例教程:分析人口普查数据-欧阳桫-专题视频课程
  3. 【工具篇】Unity内置渲染管线和URP以及HDRP轮廓外发光边缘光高亮显示演示
  4. 热力图,数据库和数据仓库
  5. Java中如何将int 类型转换为 Long类型
  6. vue中代理服务器使用
  7. Lock中的Condition
  8. MyBatis框架的搭建以及使用教程
  9. java-php-python-自考学位系统计算机毕业设计
  10. 编写一个程序,求1加到100的和