题目描述:

原题:https://vjudge.net/problem/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 )的更多相关文章

  1. Play on Words UVA - 10129 欧拉路径

    关于欧拉回路和欧拉路径 定义:欧拉回路:每条边恰好只走一次,并能回到出发点的路径欧拉路径:经过每一条边一次,但是不要求回到起始点 ①首先看欧拉回路存在性的判定: 一.无向图每个顶点的度数都是偶数,则存 ...

  2. Uva 10129 单词

    题目链接:https://uva.onlinejudge.org/external/101/10129.pdf 把单词的首字母和最后一个字母看做节点,一个单词就是一个有向边.有向图的欧拉定理,就是除了 ...

  3. UVa 10129单词(欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  5. UVa 10129 单词 (欧拉通路)

    题意: 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如acm.malform.mouse).每个单词最 多包含100 ...

  6. uva 10129 play on words——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABNUAAANeCAYAAAA1BjiHAAAgAElEQVR4nOydabWsuhaFywIasIAHJK

  7. UVa 10129 (并查集 + 欧拉路径) Play on Words

    题意: 有n个由小写字母的单词,要求判断是否存在某种排列使得相邻的两个单词,前一个单词末字母与后一个单词首字母相同. 分析: 将单词的两个字母看做节点,则一个单词可以看做一条有向边.那么题中所求的排列 ...

  8. UVa 10129 Play On Words【欧拉道路 并查集 】

    题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...

  9. UVA - 10129 Play on Words(欧拉回路+并查集)

    2.解题思路:本题利用欧拉回路存在条件解决.可以将所有的单词看做边,26个字母看做端点,那么本题其实就是问是否存在一条路径,可以到达所有出现过的字符端点.由于本题还要求了两个单词拼在一起的条件是前一个 ...

随机推荐

  1. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings,及.NET Core控制台项目中读取AppSettings

    问: ASP.NET CORE MVC 如何在Filter中使用依赖注入来读取AppSettings 答: Dependency injection is possible in filters as ...

  2. react系列(五)在React中使用Redux

    上一篇展示了Redux的基本使用,可以看到Redux非常简单易用,不限于React,也可以在Angular.Vue等框架中使用,只要需要Redux的设计思想的地方,就可以使用它. 这篇主要讲解在Rea ...

  3. iOS合并真机和模拟器framework

    在实际的项目开发中,我们会碰到某些静态库只能在真机或者模拟器中的一个上可以运行.为了让静态库在模拟器和真机都可以正常的运行,就涉及到如何把一个工程生成的静态库打包以后生成的framework进行合并. ...

  4. Spring注解配置(1)——@Autowired

    @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法.在使用@Autowired之前,我们对一个b ...

  5. md5加密+盐方式一

    这种方法是采用随机生成盐值加入password中组合成的新密码,下面是md5+盐的一个工具类,直接导入使用即可! 工具类 package com.oracle.utils; import java.s ...

  6. HTML5中的拖拽与拖放(drag&&drop)

    1.drag 当拖动某个元素时,将会依次触发下列事件: 1)dragstart:按下鼠标键并开始移动鼠标时,会触发该事件 2)drag:dragstart触发后,随即便触发drag事件,而且在元素被拖 ...

  7. flask第三方插件WTForms

    在django中有ModelForm, 虽然flask原生没有提供, 但是强大的第三方也提供了这样的功能 虽然不如django的强大, 但是基本的功能还是可以有的, 下面就来使用一哈. WTForms ...

  8. Java : java基础(5) Socket网络编程

    使用 DatagramSocket 创建一个 UDP协议的Socket, 用DatagramPacket创建一个数据包,可以指定ip和端口号以及包的数据,用socket.send()可以发送这个数据包 ...

  9. 解决thinkphp query()执行原生SQL语句成功结果报错的问题

    1.query方法 query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法). 2.execute方法 execute用于更新和写入 ...

  10. 帝国cms伪静态设置方法(收藏)

    众所周知,动态页面不利于收录和排名.伪静态可以完美的解决这问题,配合百度云加速CDN,可以让动态页面有静态页面一样快的访问速度. 今天开拓族给大家带来帝国CMS伪静态的详细设置方法. 1.栏目设置为动 ...