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:// ...
随机推荐
- iOS9 HTTPS解决办法
iOS9引入了新特性App Transport Security (ATS).详情:App Transport Security (ATS) 新特性要求App内访问的网络必须使用HTTPS协议.但是现 ...
- 更新xcode后插件失效问题——不针对特定版本的通用解决方法
一.Xcode更新后插件失效的原理 1.每次更新Xcode后插件都会失效,其实插件都还在这个目录好好的躺着呢: ~/Library/Application Support/Developer/Shar ...
- 语言基础之description方法
1.description方法的一般用处 1: // 指针变量的地址 2: NSLog(@"%p", &p); 3: // 对象的地址 4: NSLog(@"%p ...
- 移植Linux2.6.38到Tiny6410_1GNandflash
首先说一下为什么要下决心移植Linux内核,本来移植完Uboot后我想先把韦东山第二期的驱动教程看完后在试图移植内核,可是当我跟着教程写好LCD的驱动后,去设置编译友善的内核来测试程序时,我稍微改一点 ...
- python函数中的关键字参数
关键字参数: 就是在形式参数中必须要提供”传递参数名=传递参数值” 位置参数: 仅仅只有参数名 特点:1.位置参数只能出现在关键字参数之前,不管是在行参还是实参中. 2.关键字参数在调用时(实参)中 ...
- Word中对象显示不完整
选中上下文字后,右键没有段落,如果是图片的话是有的,那么我们可以点击菜单栏中段落的右下三角,在那设置单倍行距.
- easyui datagrid加载成功之后选定并获取首行数据
//加载成功之后,选定并获取首行数据 onLoadSuccess:function(data){ alert("grid加载成功"); var rows=$('test').dat ...
- php之变量覆盖漏洞讲解
1.变量没有初始化的问题(1): wooyun连接1:[link href="WooYun: PHPCMS V9 member表内容随意修改漏洞"]tenzy[/link] $up ...
- linux设备驱动:中断的实现
一.什么是中断 中断分两种: 1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求.其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ).一 ...
- javascript快速入门26--XPath
XPath 简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 ...