题意:给出给出n个单词,要求判断这些单词能否接龙,规则像成语接龙一样,就是当前单词的尾字母为下一个单词的首字母。

思路:看着像是欧拉通路相关的题目,但是重点就在于怎么抽象出来。

刚开始想了半天没想明白,老想着一个单词作为一个顶点去了,就是没转过来。

看了篇解题报告(http://blog.csdn.net/niushuai666/article/details/6917777) 后想过来了,

应该把单词的首尾字母看成顶点,而这个单词相当于连接顶点的有向边。然后这样想的话,这个图最多就有26个顶点(因为只有26个小写字母,题目要求单词为小写字母),接下来就是怎么判断这个途中是否存在欧拉通路了(即判断是否为半欧拉图或欧拉图)。

关于欧拉图的相关知识,详见:

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int in[26],out[26];//入度,出度
int differ[10];//入度不同的顶点
bool exist[26];//记录字母是否存在
int set[26];//父亲节点
int root;//根的数目int set_find(int d){  if(set[d]<0)return d;  return set[d]=set_find(set[d]);
}
void join(int x,int y){  //采用路径压缩的并查集,判断是否连通x=set_find(x);  y=set_find(y);if(x!=y) set[x]=y;  return;
}int main(){int t;//测试个数int n;//单词个数int i;//int number;//入度不同的顶点的个数char word[1100];//存放单词int a,b;scanf("%d",&t);while(t--){memset(in,0,sizeof(in));memset(out,0,sizeof(out));memset(set,-1,sizeof(set));memset(exist,0,sizeof(exist));number=0;root=0;scanf("%d",&n);while(n--){scanf("%s",word);a=word[0]-'a';b=word[strlen(word)-1]-'a';exist[a]=exist[b]=true;out[a]++;in[b]++;join(b,a);}for(i=0;i<26;i++){if(exist[i]&&set[i]<0)root++;}if(root>1)//图不连通printf("The door cannot be opened.\n");else{for(i=0;i<26;i++){if(in[i]!=out[i])differ[number++]=i;}if(number==0) //所有顶点入度等于出度,为欧拉图printf("Ordering is possible.\n");else if( number==2 && (  //注意&&、||的优先级,此处要加括号(in[differ[0]]-out[differ[0]]==1 && out[differ[1]]-in[differ[1]]==1)||(out[differ[0]]-in[differ[0]]==1 && in[differ[1]]-out[differ[1]]==1) ))//满足半欧拉图条件,为半欧拉图printf("Ordering is possible.\n");else printf("The door cannot be opened.\n");//不是欧拉图,也不是半欧拉图}}return 0;
}

转载于:https://www.cnblogs.com/bofengyu/p/4477373.html

hdu 1116 Play on Words(欧拉通路)相关推荐

  1. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  2. #1176 : 欧拉路·一(欧拉通路的判定)

    #1176 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找 ...

  3. ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)

    题目链接:点击查看 题目大意:给出一张三角形的无向图,如下图所示 求出从点 ( 1 , 1 ) 到点 ( n , n ) 找到一条最长路,且每条边至多遍历一次,输出最长路的权值以及路径 题目分析:点 ...

  4. 【POJ - 2337】Catenyms(欧拉图相关,欧拉通路输出路径,tricks)

    题干: A catenym is a pair of words separated by a period such that the last letter of the first word i ...

  5. 图论 —— 图的遍历 —— 欧拉通路与欧拉回路问题

    [基本概念] 欧拉通路:通过图中所有边一次且仅一次行遍所有顶点的通路 欧拉回路:通过图中所有边一次且仅一次行遍所有顶点的回路 欧拉图:具有欧拉回路的图 半欧拉图:具有欧拉通路而无欧拉回路的图 奇度点: ...

  6. 欧拉图——欧拉通路和欧拉回路

    定义: 欧拉通路 (欧拉迹):通过图中每条边且只通过一次,并且经过每一顶点的通路. 欧拉回路 (欧拉闭迹):通过图中每条边且只通过一次,并且经过每一顶点的回路. 欧拉图:存在欧拉回路的图. 简单说欧拉 ...

  7. 欧拉回路 欧拉通路 欧拉回路图

    来源 一.定义 对于无向图: 1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路(Euler circ ...

  8. nysit 42 欧拉通路(一笔画图)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42 题目大意:给你一些点和边,问能否用一笔把这个图画出来,每条边只能画一次 思路:求是否存 ...

  9. 欧拉通路、欧拉回路、欧拉图和半欧拉图以及 Hierholzer 算法

    概念:欧拉通路(又称欧拉路径).欧拉回路.欧拉图和半欧拉图 定义 通过图中所有边恰好一次且行遍所有顶点的通路称为欧拉通路(又称欧拉路径). 通过图中所有边恰好一次且行遍所有顶点的回路称为欧拉回路. 具 ...

  10. 图系列(四)欧拉通路与欧拉回路

    欧拉通路与欧拉回路 之前,写了图系列一二三,现在出四啦!这也意味着,对于图的部分,可以说50%以上常用的内容就已经过了一遍了.欧拉路的部分会稍微难一点,主要是我们要和定义打交道了.至于其他图的理论,我 ...

最新文章

  1. Linux编程下open()函数的用法
  2. pytorch 之 torch.bmm()函数
  3. Jupyter Notebook 常用的快捷键
  4. 定位到元素后获取其属性_Selenium界面自动化测试(4)(Python):元素定位及操作...
  5. 【Java】用Jackson进行JSON序列化/反序列化操作
  6. Linux最常用的基础命令 下篇
  7. php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化
  8. MacBook安装git教程,git学习这一篇就够了!
  9. HTML基础标签与相关案例
  10. 在新旧交替的过程中,我们成长着—导师制,舞台和挑战
  11. 面试热问——你的职业规划是什么?
  12. DateTime.ToString()的用法
  13. MySQL8.0安装与基于二进制日志文件位置的主从复制
  14. Shell脚本读取mysql结果集各数据项的值
  15. 大连有没有培训Oracle,大连诺达ORACLE甲骨文 OCP课程培训
  16. 预警|使用方维、微吼等系统直播平台警惕黑客攻击
  17. K210 only support kmodel V3/V4 now
  18. 移动端选择时间时禁止软键盘弹出
  19. 进程、线程、协程?用海贼王的故事来理解它们的差异
  20. 全民VR之下,看GOOVIS、嗨镜、柔宇如何攻下游戏、观影市场?

热门文章

  1. python编程和plc哪个好-plc和python
  2. python都能干什么-python都能做什么
  3. 武汉python培训班排行榜-比较靠谱的武汉Python培训机构是哪个?
  4. python3爬虫实例-python3爬虫实例(采集淘宝商品数据)
  5. python实现简单的api接口-Python 实现接口测试的简单实例
  6. python学生管理系统-python实现学生管理系统
  7. python处理excel教程实例-python 读写excel文件操作示例【附源码下载】
  8. python创建新文件-如何在python中编辑文件并创建一个新的文件?
  9. python基础常用语句-Python基础6—常用语句
  10. 自学python可以找到好的工作吗-通过自学python能找到工作吗