题目描述:

原题: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. 个人开源Git地址

    开源Git地址 序号 Git地址 描述 1 https://github.com/winds-june 各种源码.直接调用的jar包          2    

  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 ...

  3. 生产环境MySQL数据库集群MHA上线实施方案

    生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...

  4. React组件的使用

     一.index.js 文件[基本配置] //react语法塘 import React from 'react'; //reactDom用来操作虚拟DOM import ReactDom from ...

  5. 干货分享:QQ群排名霸屏优化规则靠前的新技术

    谈起QQ群排名的优化规则,很多人又爱又恨,原因很简单,爱他的都是引流效果是非常好的,通过关键词搜索排名好的技术,能排到全国默认前三,叫人怎能不爱他,恨的原因也恨简单,无论你的群完善的再怎么好,好像都无 ...

  6. vue分页组件重置到首页问题

    分页组件,可以借用这个老哥的@暴脾气大大https://www.cnblogs.com/sebastian-tyd/p/7853188.html#4163272 但是有一个问题就是下面评论中@ Mrz ...

  7. 使用NPOI将数据导出Excel

    NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.IS ...

  8. 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别

    [面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ...

  9. Python 1.1数字与字符基础

    一. 基础数字操作 1.加减乘除以及内置函数: min(),  max(),  sum(),  abs(),  len()         math库: math.pi math.e, math.si ...

  10. 剑指offer题目系列三(链表相关题目)

    本篇延续上一篇剑指offer题目系列二,介绍<剑指offer>第二版中的四个题目:O(1)时间内删除链表结点.链表中倒数第k个结点.反转链表.合并两个排序的链表.同样,这些题目并非严格按照 ...