Play on Words UVA - 10129 欧拉路径
定义:
欧拉回路:每条边恰好只走一次,并能回到出发点的路径
欧拉路径:经过每一条边一次,但是不要求回到起始点
①首先看欧拉回路存在性的判定:
一、无向图
每个顶点的度数都是偶数,则存在欧拉回路。
二、有向图(所有边都是单向的)
每个节顶点的入度都等于出度,则存在欧拉回路。
②.欧拉路径存在性的判定
一。无向图
一个无向图存在欧拉路径,当且仅当 该图所有顶点的度数为偶数 或者 除了两个度数为奇数外其余的全是偶数。
二。有向图
一个有向图存在欧拉路径,当且仅当 该图所有顶点的入度等于出度 或者 一个点出度比入度多一(起点) 一个点入度比出度多一(终点) 其他都为入度等于出度。
在已经知道存在的情况下,下面的程序用于输出路径;
如果是输出欧拉道路,那么参数必须是道路的起点; 另外打印的顺序是逆序的,因此真正使用时候,用push存入(u,v);
void euler(int u){
for(Int v = 0; v < n; v++){
if(G[u][v]&&!vis[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]即可;
- /**
- 题目:Play on Words UVA - 10129
- 链接:https://vjudge.net/problem/UVA-10129
- 题意:给定n个单词,排成一行,使单词的首部字母和上一个单词(如果存在)的尾部字母相同。问是否存在这样的一行序列满足要求。
- 思路:
- 首先保证不考虑方向的情况下图是连通的。
- 判断有向图是否存在欧拉路径。
- 1,所有的点入度等于出度。
- 2,一个点入度比出度多一,一个点出度比入度多一,其他点入度等于出度。
- 把每一个word的首字母和尾字母连一条有向的边。
- */
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- typedef long long LL;
- const int mod=1e9+;
- const int maxn=1e2+;
- const double eps = 1e-;
- int T, n;
- char s[];
- int in[], ot[];
- int st[];
- int vis[];
- int Find(int x)
- {
- if(x==st[x]) return x;
- return st[x] = Find(st[x]);
- }
- void Merge(int x,int y)
- {
- int fx = Find(x);
- int fy = Find(y);
- if(fx>fy){
- st[fx] = fy;
- }else st[fy] = fx;
- }
- int main()
- {
- cin>>T;
- while(T--)
- {
- scanf("%d",&n);
- memset(in, , sizeof in);
- memset(ot, , sizeof ot);
- memset(vis, , sizeof vis);
- for(int i = ; i < ; i++) st[i] = i;
- for(int i = ; i < n; i++){
- scanf("%s",s);
- int len = strlen(s);
- vis[s[]-'a'] = vis[s[len-]-'a'] = ;
- Merge(s[]-'a',s[len-]-'a');
- ot[s[]-'a']++;
- in[s[len-]-'a']++;
- }
- int r;
- for(int i = ; i < ; i++){
- if(vis[i]){
- r = Find(i);
- }
- }
- int sign = ;
- for(int i = ; i < ; i++){
- if(vis[i]){
- if(Find(i)!=r){
- sign = ; break;
- }
- }
- }
- if(sign){///不考虑方向,没有连通。
- printf("The door cannot be opened.\n"); continue;
- }
- int flag1, flag2, flag3;
- flag1 = flag2 = flag3 = ;///分别表示入度等于出度的点数,入度比出度多一的点数,出度比入度多一的点数。
- for(int i = ; i < ; i++){
- if(in[i]==ot[i]){
- flag1++;
- }
- if(in[i]-ot[i]==){
- flag2++;
- }
- if(ot[i]-in[i]==){
- flag3++;
- }
- }
- if(flag1==||((flag1==)&&(flag2==)&&(flag3==))){
- printf("Ordering is possible.\n");
- }else
- printf("The door cannot be opened.\n");
- }
- return ;
- }
Play on Words UVA - 10129 欧拉路径的更多相关文章
- UVa 10129 (并查集 + 欧拉路径) Play on Words
题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列 ...
- UVa 10129 Play on Words(有向图欧拉路径)
Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has to s ...
- UVa 10129 Play on Words(并查集+欧拉路径)
题目链接: https://cn.vjudge.net/problem/UVA-10129 Some of the secret doors contain a very interesting wo ...
- Uva 10129 单词
题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...
- UVa 10129单词(欧拉回路)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 10129 play on words——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- 单词 (Play on Words UVA - 10129 )
题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
随机推荐
- maven-pom-properties
出处: http://blog.csdn.net/taiyangdao/article/details/52358083
- 利用Cain+wireshark进行协议分析
Cain抓包指南 1.简介: 在开发测试工作中经常有捕抓设备间通信报文的需求,但有时候被抓包的设备并不直接和进行抓包的主机或设备进行通信,因此会达不到想要的效果.解决该问题的常见方法有: (1).为被 ...
- Telnet协议详解
转:http://www.cnblogs.com/dazhaxie/archive/2012/06/27/2566054.html 1. 概述 Telnet协议是TCP/IP协议族中的一员,是Inte ...
- getopt使用
参考: http://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html http://en.wikipedia.org ...
- GIS空间参考及坐标转换
空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两 ...
- Matlab与C++混合编程 编写独立外部应用程序时出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误
出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误,这种错误一般是同名函数出现在两个不同的头文件中了. 笔者的这个错误是由于 #include "mat.h" ...
- python pip更换下载源(转)
对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...
- CSS实现四种loading动画效果
四种loading加载效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- [转载]Java 反射机制(包括组成、结构、示例说明等内容)
FROM:http://www.cnblogs.com/skywang12345/p/3345205.html 第1部分 Java 反射机制介绍 Java 反射机制.通俗来讲呢,就是在运行状态中,我们 ...
- javascript 递归函数调用(recursive funciton call)
所谓的递归函数调用,就是自己调用自己的函数. var timerHandler = null; function a(){ console.log(123); timerHandler = setTi ...