UVa-10129 单词
2015-12-16 22:36
260 查看
分析:欧拉回路的应用
欧拉回路:
一.无向图
欧拉回路:每个顶点度数都是偶数
欧拉路:所有点度数为偶数,或者只有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;
}
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
欧拉回路:
一.无向图
欧拉回路:每个顶点度数都是偶数
欧拉路:所有点度数为偶数,或者只有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;
}
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
相关文章推荐
- IO(输入流)
- windows 系统下CMD命令大全
- Dancing links
- 导致SharePoint发生Timeout的几处门槛设置
- Android开发快速入门(环境配置、Android Studio安装)
- 文本框空白按钮不可按
- 文章标题
- 关于pthread的cancel point
- Jmeter(二)-使用代理录制脚本
- python学习笔记-Day08--(socket和socketserver)
- 零碎知识总结——学渣修行路
- ejabberd_s2s
- 第10篇 WINDOWS2003服务器 IIS上配置404页面的图文教程
- SharePoint中遇到Timeout
- JavaScript的event对象
- javaday22-IO序列流
- 用RxJava写的一个Android的小Demo
- 一篇关于用户需求,己方产品(服务)与竞争对手的小清单
- 第二十八天-nfs网络文件系统
- 第二十七天-nfs网络文件系统企业级深度讲解