hdu((1116))欧拉回路和通路。。
来源:互联网 发布:淘宝hd版微淘在哪里 编辑:程序博客网 时间:2024/05/01 19:33
题目大意:给你n个单词,要你判断这些单词能不能首尾相连。
把每个单词的首尾字母有一条有向边相连,记录每个字母的入度和出度把每两个能连的单词用一条有向边边相连,既是要判断该有向图图是否有欧拉通路,
至于欧拉回路和欧拉通路的判定可以总结为如下:
1)所有的点联通
2)欧拉回路中所有点的入度和出度一样。
3)欧拉通路中终点的入度 - 出度 = 1,起点的 初度 - 入度 = 1, 其他的所有点入度 = 出度;
#include<stdio.h>
#include<string.h>
#include<math.h>
int pre[50];
int in[50],out[50];
int find(int k)
{
if(pre[k]==k)
return k;
pre[k]=find(pre[k]);
return pre[k];
}
int main()
{
int n,i,len,t,a,b,f1,f2,s,s1,s2;
char str[1005];
scanf("%d",&t);
while(t--)
{
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
for(i=0;i<26;i++)
pre[i]=i;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
len=strlen(str);
a=str[0]-'a';
b=str[len-1]-'a';
in[a]++;
out[b]++;
f1=find(a);
f2=find(b);
if(f1!=f2)
pre[f1]=f2;
}
s=0;
for(i=0;i<26;i++)
if(pre[i]==i&&(in[i]+out[i]))
s++;
if(s>1)
{
printf("The door cannot be opened.\n");
continue;
}
s1=0;s2=0;
for(i=0;i<26;i++)
{
if(in[i]!=out[i])
{
s1++;
if(abs(in[i]-out[i])==1)
s2++;
}
}
if(s1==0)
{
printf("Ordering is possible.\n");
continue;
}
if(s1==2&&s2==2)
{
printf("Ordering is possible.\n");
continue;
}
printf("The door cannot be opened.\n");
}
return 0;
}
- hdu((1116))欧拉回路和通路。。
- hdu 1116(欧拉回路,有向通路数)
- HDU-5883 The Best Path(欧拉通路和欧拉回路)
- ZOJ 2016 Play on Words (HDU 1116)(欧拉回路,欧拉通路)
- 欧拉回路(通路)的输出
- HDU 3018 Ant Trip(欧拉回路 欧拉通路,一笔画问题)
- 如何寻找欧拉回路、欧拉通路(套圈法)
- 如何寻找欧拉回路、欧拉通路(套圈法)
- hdu5883The Best Path(欧拉通路&&欧拉回路)
- 欧拉通路、回路
- 弗罗莱(Fleury)算法 欧拉(Euler)通路/回路
- 弗罗莱(Fleury)算法 欧拉(Euler)通路/回路
- 混合图的欧拉回路(通路)判定
- 欧拉图——欧拉通路和欧拉回路
- 杭电1116————欧拉回路(通路) + 并查集基础
- 欧拉通路 欧拉回路的判定 Hdu 1878 欧拉回路
- hdu1116欧拉通路 回路
- HDU 3472 HS BDC 混合欧拉回路通路
- 树形dp ural1018苹果二叉树
- C#中的你,呵呵
- 初始Hive —— 深入浅出学Hive
- 如何修改myeclipse下的jsp模板
- Android的FrameLayout使用要注意的问题
- hdu((1116))欧拉回路和通路。。
- OpenCV中的提取子矩阵的函数
- Hive安装与配置——深入浅出学Hive
- 面试算法题
- 利用正则表达式获取博客园随笔(三)
- IOS开发之navigationBar的使用
- Linux 异步IO机制
- java基础知识汇总
- FZU 2020 组合