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

本文共 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

你可能感兴趣的文章
jQuery插件开发的准备
查看>>
Dubbo点滴(2)之集群容错
查看>>
Zend Framework 自动加载类的实现方法
查看>>
7月24日云栖精选夜读:未来的超级智能网络攻击需要AI竞技俱乐部来拯救
查看>>
Cloudera携手CenturyLink提供大数据即服务
查看>>
所有代码都需要单元测试覆盖吗?
查看>>
如何创建线程
查看>>
Eclipse搭建Android ADT+SDK+AVD
查看>>
《Android传感器开发与智能设备案例实战》——第2章,第2.1节安装Android SDK的系统要求...
查看>>
《树莓派Python编程入门与实战(第2版)》——3.8 使用适当的工具
查看>>
《Python游戏编程入门》——导读
查看>>
《软件工程(第4版?修订版)》—第1章1.11节本章对单个开发人员的意义
查看>>
Java IO: RandomAccessFile
查看>>
桌面数据库绿色版
查看>>
android 国内工具集
查看>>
建筑效果图素材站SKALGUBBAR
查看>>
python gzip 压缩/解压缩 字符串
查看>>
Android framework系统默认设置修改
查看>>
android staticlayout使用讲解
查看>>
ecshop用户登录问题及ecshop购物车问题解决办法
查看>>