单词 (Play on Words UVA - 10129 )
题目描述:
题目思路:
1.明显是判断欧拉路径
2.欧拉路径的两个条件
a.图连通
b.至多为两个奇点,且一个为起点一个为重点
3.连通还是用DFS判断,奇点在输入时开两个数组统计出入度
AC代码
#include <iostream>
#include <cstring>
using namespace std; const int maxn = + ;
int G[maxn][maxn],vis[maxn]; //图的实现和访问标记
int ind[maxn],outd[maxn]; //出入度的统计
char str[]; void dfs(int u)
{
vis[u] = ;//访问标记
for(int i = ;i < maxn;i ++)
if(!vis[i] && G[u][i]) dfs(i) ;
} int main(int argc, char *argv[])
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n ; memset(G,,sizeof(str)) ;
memset(ind,,sizeof(ind));
memset(outd,,sizeof(outd)) ;
for(int i = ;i < n;i ++)
{
cin >> str ;
int len = strlen(str);
++G[str[] - 'a'][str[len-] - 'a'] ; //字母为结点,单词为边
++ind[str[len-] - 'a'] ; //出入度的统计
++outd[str[] - 'a'] ;
} bool flag = true ;
int cnt1 = ,cnt2 = ;
for(int i = ;i < maxn;i ++)
{
if(ind[i] != outd[i]){
if(ind[i] == outd[i] + ) cnt1++ ;//可能为起点的奇点
else if(ind[i] + == outd[i]) cnt2++ ;
else{
flag = false; //出入度相差大于1,不符合欧拉路径
break ;
}
}
}
if(cnt1 && cnt2 && cnt1+cnt2 > ) flag = false ;// 奇点存在且大于2,不符合欧拉路径 if(flag) //如果符合欧拉路径,dfs判断图是否连通
{
memset(vis,,sizeof(vis)) ;
//两种情况,两个奇点,则必从其中一个为起点
if(cnt1 + cnt2 == )
{
for(int i = ;i < maxn;i ++)
if(outd[i] && outd[i] - ind[i] == ) //找起点
{dfs(i); break;}
}
else
{
for(int i = ;i < maxn;i ++)
if(outd[i]) {dfs(i); break;}
} bool tag = true;
//如果此时还有未访问到的点,则图不连通,不符合欧拉路径
for(int i = ;i < maxn;i ++)
{
if(outd[i]&&!vis[i]) {
tag = false; break;
}
if(ind[i]&&!vis[i]) {
tag = false; break;
}
}
if(tag) cout << "Ordering is possible."<< endl;
else cout << "The door cannot be opened." << endl;
}
else cout << "The door cannot be opened." << endl; }
return ;
}
单词 (Play on Words UVA - 10129 )的更多相关文章
- Play on Words UVA - 10129 欧拉路径
关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...
- 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 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- UVa 10129 单词 (欧拉通路)
题意: 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm.malform.mouse).每个单词最 多包含100 ...
- uva 10129 play on words——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK
- UVa 10129 (并查集 + 欧拉路径) Play on Words
题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
- UVA - 10129 Play on Words(欧拉回路+并查集)
2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...
随机推荐
- 个人开源Git地址
开源Git地址 序号 Git地址 描述 1 https://github.com/winds-june 各种源码.直接调用的jar包 2
- Use PerfHUD ES to Do Frame Capture Android Game
Author: http://www.cnblogs.com/open-coder/p/3898224.html Get Start This is short tutorial about how ...
- 生产环境MySQL数据库集群MHA上线实施方案
生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...
- React组件的使用
一.index.js 文件[基本配置] //react语法塘 import React from 'react'; //reactDom用来操作虚拟DOM import ReactDom from ...
- 干货分享:QQ群排名霸屏优化规则靠前的新技术
谈起QQ群排名的优化规则,很多人又爱又恨,原因很简单,爱他的都是引流效果是非常好的,通过关键词搜索排名好的技术,能排到全国默认前三,叫人怎能不爱他,恨的原因也恨简单,无论你的群完善的再怎么好,好像都无 ...
- vue分页组件重置到首页问题
分页组件,可以借用这个老哥的@暴脾气大大https://www.cnblogs.com/sebastian-tyd/p/7853188.html#4163272 但是有一个问题就是下面评论中@ Mrz ...
- 使用NPOI将数据导出Excel
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.IS ...
- 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...
- Python 1.1数字与字符基础
一. 基础数字操作 1.加减乘除以及内置函数: min(), max(), sum(), abs(), len() math库: math.pi math.e, math.si ...
- 剑指offer题目系列三(链表相关题目)
本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...