博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA - 10129 Play on Words
阅读量:5024 次
发布时间:2019-06-12

本文共 1422 字,大约阅读时间需要 4 分钟。

传送门:

题意:输入n个单词问能否把所有单词串起来(每个单词只能用一遍),要求前一个单词的末字母与后一个单词的首字母相同

题解:可以把一个单词的末字母和首字母看成是节点,把中间的字母看成是一条路径,那么题目就转变成求一条欧拉#include <iostream>

#include 
#define pb push_back#define fio ios::sync_with_stdio(false);cin.tie(0)using namespace std;vector
vec[30];int n;int in[30];int out[30];int vis[30];void DFS(int u){ vis[u]=0; for(int i=0;i
>t; while(t--){ for(int i=0;i<30;i++)vec[i].clear(),in[i]=0,out[i]=0,vis[i]=0; cin>>n; int num=-1; for(int i=0;i
>str; int u=str[0]-'a'; int v=str[str.length()-1]-'a'; vis[u]=1; vis[v]=1; out[u]++; in[v]++; vec[u].pb(v); num=u; } int flag=0; int l=0; int r=0; for(int i=0;i<30;i++){
//判断是否满足有向图欧拉道路出入度的关系 if(in[i]!=out[i]){ if(in[i]-out[i]==1)l++; if(out[i]-in[i]==1)r++,num=i; if(abs(in[i]-out[i])>1)flag=1; } } if(flag==0&&((l==1&&r==1)||(l+r==0))){ DFS(num); for(int i=0;i<30;i++){ flag+=vis[i]; } } if(flag){ cout<<"The door cannot be opened.\n"; } else { cout<<"Ordering is possible.\n"; } } return 0;}

 

转载于:https://www.cnblogs.com/Mrleon/p/8577367.html

你可能感兴趣的文章
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
tcp文件上传优化
查看>>
单片机——间隔点亮LED
查看>>
【Python】实战一 外星人入侵
查看>>
Repeater 动态增加删除一行
查看>>
java学习笔记25(Collections类)
查看>>
KMP
查看>>
Java多线程基础
查看>>
4 自动化构建工具gulp
查看>>