UVa-10129 单词
来源:互联网 发布:windows 10 mobile安卓 编辑:程序博客网 时间:2024/06/06 14:28
分析:欧拉回路的应用
欧拉回路:
一.无向图
欧拉回路:每个顶点度数都是偶数
欧拉路:所有点度数为偶数,或者只有2个点度数为奇数
二.有向图(非混合)
欧拉回路:每个顶点入度等于出度
欧拉路:每个顶点入度等于出度;
或者只有1个点入度比出度小1, 从这点出发,只有1个点出度比入度小1,从这个点结束,其他点入度等于出度
三.混合图(有的边单向,有的边不确定方向)
一.无向图
欧拉回路:每个顶点度数都是偶数
欧拉路:所有点度数为偶数,或者只有2个点度数为奇数
二.有向图(非混合)
欧拉回路:每个顶点入度等于出度
欧拉路:每个顶点入度等于出度;
或者只有1个点入度比出度小1, 从这点出发,只有1个点出度比入度小1,从这个点结束,其他点入度等于出度
三.混合图(有的边单向,有的边不确定方向)
本题就是运用了欧拉回路与DFS的知识
#include<stdio.h>
#include<string.h>
#define MM 27
int N,a[MM][MM],vis[MM],in[MM],out[MM],count;
int dfs(int u,int total)
{
int j;
if(total==count) return 1;
vis[u]=1;
for(j=0;j<26;j++)
{
if(a[u][j]&&!vis[j])
{
if(dfs(j,total+1))
return 1;
}
}
return 0;
}
int main()
{
int i,T,m,u,v,L;
char s[1100],b[]={"abcdefghijklmnopqrstuvwxyz"};
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
memset(vis,0,sizeof(vis));
count=0;
scanf("%d",&N);getchar();
for(i=0;i<N;i++)
{
gets(s);L=strlen(s);
u=strchr(b,s[0])-b;
v=strchr(b,s[L-1])-b;
in[u]++;
out[v]++;
a[u][v]=1;
if(!vis[u])
{
vis[u]=1;
count++;
}
if(!vis[v])
{
vis[v]=1;
count++;
}
}
memset(vis,0,sizeof(vis));
for(i=0;i<26;i++)
{
if(in[i]!=0||out[i]!=0)
break;
}
if(!dfs(i,1))
printf("The door cannot be opened.\n");
else
{
m=0;
for(i=0;i<26;i++)
{
if(in[i]!=0||out[i]!=0)
{
if(in[i]-out[i]==1||in[i]-out[i]==-1)
m++;
else
{
if(in[i]!=out[i])
{
m=-1;break;
}
}
}
}
if(m==0||m==2)
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
}
}
return 0;
}
#include<stdio.h>
#include<string.h>
#define MM 27
int N,a[MM][MM],vis[MM],in[MM],out[MM],count;
int dfs(int u,int total)
{
int j;
if(total==count) return 1;
vis[u]=1;
for(j=0;j<26;j++)
{
if(a[u][j]&&!vis[j])
{
if(dfs(j,total+1))
return 1;
}
}
return 0;
}
int main()
{
int i,T,m,u,v,L;
char s[1100],b[]={"abcdefghijklmnopqrstuvwxyz"};
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
memset(vis,0,sizeof(vis));
count=0;
scanf("%d",&N);getchar();
for(i=0;i<N;i++)
{
gets(s);L=strlen(s);
u=strchr(b,s[0])-b;
v=strchr(b,s[L-1])-b;
in[u]++;
out[v]++;
a[u][v]=1;
if(!vis[u])
{
vis[u]=1;
count++;
}
if(!vis[v])
{
vis[v]=1;
count++;
}
}
memset(vis,0,sizeof(vis));
for(i=0;i<26;i++)
{
if(in[i]!=0||out[i]!=0)
break;
}
if(!dfs(i,1))
printf("The door cannot be opened.\n");
else
{
m=0;
for(i=0;i<26;i++)
{
if(in[i]!=0||out[i]!=0)
{
if(in[i]-out[i]==1||in[i]-out[i]==-1)
m++;
else
{
if(in[i]!=out[i])
{
m=-1;break;
}
}
}
}
if(m==0||m==2)
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
}
}
return 0;
}
FAQ | About Virtual Judge | Forum | Discuss | Open Source Project
All Copyright Reserved ?2010-2014 HUST ACM/ICPC TEAM
Anything about the OJ, please ask in the forum, or contact author:Isun
All Copyright Reserved ?2010-2014 HUST ACM/ICPC TEAM
Anything about the OJ, please ask in the forum, or contact author:Isun
0 0
- UVA 10129 单词
- UVa 10129 单词
- uva 10129 单词
- UVa-10129 单词
- 【Uva 10129】玩弄单词
- uva-10129 单词
- 例题:单词(UVa 10129h)
- 例题6-16 UVA 10129 Play On Words单词
- UVa 10129 单词 (有向欧拉路+并查集)
- Play on Words 单词 UVA 10129 (欧拉+dfs)
- 紫书章六例题16 单词 UVA 10129(欧拉道路)
- 例题6-16 单词(Play On Words, UVa 10129)
- 10129单词
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
- uva 10129 Play On Words(单词)求欧拉回路或欧拉通路
- UVA 123 - Searching Quickly(分离单词)
- UVA-10008统计单词的数量
- UVA 10391(把符合单词输出,map)
- 用RxJava写的一个Android的小Demo
- windows 系统下CMD命令大全
- 数据结构 — 归并排序
- 零碎知识总结——学渣修行路
- 在openwrt下对华为WA633无线AP的千兆网卡驱动进行支持
- UVa-10129 单词
- 文章标题
- 柔性数组成员
- 文本框空白按钮不可按
- Arduino - 串口操作函数与示例代码大全
- IO(输入流)
- 欢迎使用CSDN-markdown编辑器
- linux基础命令
- iOS 9 新特性之实现 3D Touch 就是 So easy -- OC版