1107: 单向公路(bfs+输入整理)(DFS也可以,而且更快)
2016-04-05 16:14
399 查看
Description
某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶。现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇。(我们规定,城镇自己跟自己可互相到达,即A可到达A).
Input
第一行只有一个数N,下面将跟着2N行数据. 在前N行数据中,对于每行数据,最开头一个数字number,表明这一行总共有number个数,number的下一个数为i,代表编号为i的那个城镇.这行余下的就是跟i有公路连接的城镇的名单,且只能从城镇i驶向其他城镇。如 4 1 2 3,表明:此行有4个数,跟城镇1有公路连接的城镇是编号为2和3的城镇,且只允许从城镇1驶向城镇2和3,而不能从2到1或3到1。 在后N行数据中,每行由两个数字组成a,b. 对于每个输入的数有如下关系 0 <= input_number <= 1000 .
Output
对于输入数据中的每个a,b,判断是否可以从城镇a通过公路到达城镇b,如果可以,输出Yes;否则输出No.
Sample
Input
Raw
3 4 1 2 3 3 4 5 3 5 8 1 2 1 8 4 8
Sample
Output
Raw
Yes No Yes
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
int maze[1001][1001],flag[1001];
using namespace std;
int bfs(int s,int e,int ma)
{
queue<int>que;
que.push(s);
while(!que.empty())
{
int key=que.front();
que.pop();
if(key==e)
return 1;
for(int i=0;i<=ma;i++)
{
if(!flag[i]&&maze[key][i])
{
flag[i]=0;
que.push(i);
}
}
}
return 0;
}
int main ()
{
int N,M,st,ed,ans=0;
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%d%d",&M,&st);
for(int j=0;j<M-2;j++)
{
scanf("%d",&ed);
maze[st][ed]=1;
ans=max(ans,max(st,ed));
}
}
for(int i=0;i<N;i++)
{
memset(flag,0,sizeof(flag));
scanf("%d%d",&st,&ed);
cout<<(bfs(st,ed,ans)?"Yes\n":"No\n");
}
return 0;
}
DFS:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=1005;
int maze[maxn][maxn];
int visit[maxn];
int flag,MAX=0;
void dfs (int st,int ed,int n)
{
visit[st]=1;
if(maze[st][ed]==1){flag=1;return ;}
for(int i=1;i<=n&&!flag;i++)
{
if(visit[i]==0&&maze[st][i]==1)
{
visit[i]=1;
dfs(i,ed,n);
visit[i]=0;
}
}
}
int main ()
{
int n,m,st,ed,s,e;
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
maze[i][j]=-1,maze[i][i]=0;//初始化
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&m,&st);
MAX=max(MAX,st);
for(int i=0;i<m-2;i++){
scanf("%d",&ed);
MAX=max(MAX,ed);
maze[st][ed]=1;
}
}
for(int i=0;i<n;i++){
flag=0;
scanf("%d%d",&s,&e);
memset(visit,0,sizeof(visit));
dfs(s,e,MAX);
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}
相关文章推荐
- PHP程序员课程大纲
- VMware Workstation下安装vmware tools
- 一个Demo搞定Gson解析+Volley框架+Universal框架+通用适配器
- 软件工程第4章读后感
- /users/products.:format 这种写法的其对应解析字符写法
- 编写高质量的代码-------从命名开始
- listview+seekbar问题的解决
- 140730暑期培训.txt
- 带min函数的栈
- 友盟第三方登陆,及分享,使用工具集成。
- 社交網絡一
- Leetcode 90. Subsets II
- 华为USG防火墙双机热备(业务口工作在三层上下行连接交换机)
- js post x-www-form-urlencoded、form-url数据,Nodejs获取x-www-form-urlencoded数据
- ViewPager 简单分析
- Java 集合
- surfaceView和View区别
- 测试
- ubuntu 14.4常见命令
- Android根据文件名(String类型)去查找R文件中的对应id(int类型)