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:// ...
随机推荐
- Matlab与神经网络入门
第一节.神经网络基本原理 1. 人工神经元( Artificial Neuron )模型 人工神经元是神经网络的基本元素,其原理可以用下图表示: 图1. 人工神经元模型 图中x1~xn是从其他神经 ...
- 分析器错误 未能加载类型“XX.WebApiApplication”
解决方案,删除bin目录下内容(有单独使用dll的删除前请先备份) 清理解决方案并重新生成
- Linux下打包命令tar
转:http://blog.chinaunix.net/uid-29021161-id-3922752.html Linux下最常用的打包程序是tar,用tar命令打成的包文件通常以.tar结尾 1. ...
- ArcMap绘图时,节点显示时的小数点位数
直接来图吧,省的啰嗦了: 打开选中节点的,节点坐标列表(Edit Sketch Properties):
- t-sql 笔记(2)
1.用标点符号分隔的字符串,转换成表 -- SELECT * FROM dbo.split('581:579:519:279:406:361:560',':') ), )) )) AS BEGIN D ...
- Coherence的NameService
Coherence*Extend模式下客户端需要连接一个或多个proxy Server从而接入集群,在一些比较大型的环境中,Proxy Server往往比较多,一旦修改起来需要修改每个配置文件,在Co ...
- SlickGrid资料
SlickGrid简单介绍 : https://github.com/mleibman/SlickGrid/wiki 快速入门 : https://github.com/mleibman/SlickG ...
- scrapy-splash抓取动态数据例子十一
一.介绍 本例子用scrapy-splash抓取活动树网站给定关键字抓取活动信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...
- 使用Python开发SQLite代理服务器(转载)
转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...
- [Angular] Angular Attribute Decorator - When to use it?
When we pass value to a component, normally we use @Input. <my-comp [courses]="(courses$ | a ...