uva 10129
来源:互联网 发布:titan5知乎 编辑:程序博客网 时间:2024/06/07 05:21
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=26;
bool g[maxn][maxn]; //邻接矩阵储存
bool vis[maxn],vis0[maxn];
int num[maxn];
int n;
//判断连通
void dfs(int u)
{
vis[u]=true;
for(int v=0;v<maxn;v++)
if(g[u][v]&&!vis[v]) dfs(v);
}
bool judge(int e) //e为起点
{
memset(vis,false,sizeof(vis));
dfs(e);
for(int i=0;i<maxn;i++)
if(vis0[i]!=vis[i]) return false;
return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(g,false,sizeof(g));
memset(num,0,sizeof(num));
memset(vis0,false,sizeof(vis0));
scanf("%d",&n);
while(n--)
{
string s;
cin>>s;
int k=s.length();
int a=s[0]-'a';
int b=s[k-1]-'a';
g[a][b]=true;
vis0[a]=vis0[b]=true; //表示出现过的字符
num[a]--;
num[b]++;
}
bool flag=true,in=false,out=false; //判断出入度
int e;
for(int i=0;i<maxn;i++)
{
if(num[i]<-1||num[i]>1) {
flag=false;
break;
}
if(num[i]==-1)
{
if(in)
{
flag=false;
break;
}
in=true;
e=i;
}
if(num[i]==1)
{
if(out)
{
flag=false;
break;
}
out=true;
}
}
if(flag) flag=judge(e); //判断连通
if(flag) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
return 0;
}
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=26;
bool g[maxn][maxn]; //邻接矩阵储存
bool vis[maxn],vis0[maxn];
int num[maxn];
int n;
//判断连通
void dfs(int u)
{
vis[u]=true;
for(int v=0;v<maxn;v++)
if(g[u][v]&&!vis[v]) dfs(v);
}
bool judge(int e) //e为起点
{
memset(vis,false,sizeof(vis));
dfs(e);
for(int i=0;i<maxn;i++)
if(vis0[i]!=vis[i]) return false;
return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(g,false,sizeof(g));
memset(num,0,sizeof(num));
memset(vis0,false,sizeof(vis0));
scanf("%d",&n);
while(n--)
{
string s;
cin>>s;
int k=s.length();
int a=s[0]-'a';
int b=s[k-1]-'a';
g[a][b]=true;
vis0[a]=vis0[b]=true; //表示出现过的字符
num[a]--;
num[b]++;
}
bool flag=true,in=false,out=false; //判断出入度
int e;
for(int i=0;i<maxn;i++)
{
if(num[i]<-1||num[i]>1) {
flag=false;
break;
}
if(num[i]==-1)
{
if(in)
{
flag=false;
break;
}
in=true;
e=i;
}
if(num[i]==1)
{
if(out)
{
flag=false;
break;
}
out=true;
}
}
if(flag) flag=judge(e); //判断连通
if(flag) printf("Ordering is possible.\n");
else printf("The door cannot be opened.\n");
}
return 0;
}
阅读全文
0 0
- Uva(10129)+Uva(10054)
- Uva 10129
- uva 10129
- uva 10129
- uva 10129
- UVA 10129
- UVa-10129
- UVA 10129
- uva 10129
- UVA 10129 单词
- UVa 10129 单词
- uva 10129 dfs
- uva 10129 单词
- UVa-10129 单词
- 【Uva 10129】玩弄单词
- UVa 10129 欧拉路
- uva-10129 单词
- uva
- 循环嵌套理解-三角形
- Linux CentOS 下安装JDK
- OpenGL实验:绘制彩色五角星
- 分类模型到底如何选择
- RCF远程调用框架
- uva 10129
- 多叉树构建, 遍历(层次优先,深度优先),应用
- python操作MongoDB
- 程序员需要知道几个概念
- HTML瀑布特效
- Python : open函数
- 带约束条件的差分进化算法(python实现)
- 听云安装
- Zeppelin使用说明