题目链接:http://acm.swust.edu.cn/problem/0085/

Time limit(ms): 5000      Memory limit(kb): 65535
 
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 和3 连到1. 在后N行数据中,每行由两个数字组成a,b(表示城镇的编号). 对于每个输入的数有如下关系 0 <= input_number <= 1000 .

 
Output

对于输入数据中的每个a,b,判断是否可以从城镇a通过公路到达城镇b,如果可以,输出Yes;否则输出No.

Sample Input

3
4 1 2 3
3 4 5
3 5 8
1 2
1 8
4 8
Sample Output
Yes
No
Yes
 
 
解题思路:处理好数据后直接bfs~~~
 
代码如下:
 #include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
int mpt[][], vis[];
int bfs(int x, int y, int n){
queue<int> Q;
Q.push(x);
while (!Q.empty()){
int now = Q.front();
Q.pop();
if (now == y) return ;
for (int i = ; i < n; i++){
if (!vis[i] && mpt[now][i]){
vis[i] = ;
Q.push(i);
}
}
}
return ;
}
int main(){
int n, t, x, y, i, j, maxn = -;
cin >> t;
for (i = ; i < t; i++){
cin >> n >> x;
for (j = ; j < n - ; j++){
cin >> y;
mpt[x][y] = ;
maxn = max(maxn, max(x, y) + );//找出出现的点的最大值+1,避免大范围搜索不必要的点
}
}
for (i = ; i < t; i++){
memset(vis, , sizeof(vis));
cin >> x >> y;
cout << (bfs(x, y, maxn) ? "Yes\n" : "No\n");
}
return ;
}

以前有个代码,个人感觉没问题,但是一直Rutime Error,有大神路过给个原因吧~~~

代码如下:

 #include <stdio.h>
#include <string.h>
#define maxn 10001
int map[maxn][maxn], max;
int dfs(int star, int next)
{
int i, flag, vis[maxn];
memset(vis, , sizeof(vis));
vis[star] = ;
if (map[star][next] == )
return ;
for (i = , flag = ; i <= max&&!flag; i++)
{
if (vis[i] == && map[star][i] == )
{
vis[i] = ;
flag = dfs(i, next);
vis[i] = ;
}
}
return flag;
}
int main()
{
int i, j, m, n;
int star, next;
scanf("%d", &n);
memset(map, , sizeof(map));
for (i = ; i<maxn; i++)
map[i][i] = ;
max = ;
for (i = ; i <= n; i++)
{
scanf("%d%d", &m, &star);
if (star> max)
max = star;
for (j = ; j <= m - ; j++)
{
scanf("%d", &next);
if (next > max)
max = next;
map[star][next] = ;
}
}
for (i = ; i <= n; i++)
{
scanf("%d%d", &star, &next);
if (dfs(star, next))
printf("YES\n");
else
printf("NO\n");
}
return ;
}

[Swust OJ 85]--单向公路(BFS)的更多相关文章

  1. 1107: 单向公路(bfs+输入整理)(DFS也可以,而且更快)

    Description 某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一 ...

  2. YCOJ单向公路

    题目: 描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另 ...

  3. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  4. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  5. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  6. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  7. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  8. [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)

    题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  9. 【bfs】单向公路-C++

    描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇 ...

随机推荐

  1. 在iOS上增加手势锁屏、解锁功能

    在iOS上增加手势锁屏.解锁功能 在一些涉及个人隐私的场景下,尤其是当移动设备包含太多私密信息时,为用户的安全考虑是有必要的. 桌面版的QQ在很多年前就考虑到用户离开电脑后隐私泄露的危险,提供了“离开 ...

  2. Push segues can only be used when the.....

    刚刚遇到的两个错误,. 1, Terminating app due to uncaught exception'NSGenericException', reason: 'Push segues c ...

  3. 关于地址的理解 C++

    #include <iostream> using namespace std; int main(){ ; int* ptr; ptr=&a; cout<<& ...

  4. Android清单文件具体解释(三)----应用程序的根节点&lt;application&gt;

    <application>节点是AndroidManifest.xml文件里必须持有的一个节点,它包括在<manifest>节点下.通过<application>节 ...

  5. 如何在同一系统中启动多个 TOMCAT

    <Server port="8005" shutdown="SHUTDOWN"> 接受server关闭指令的port号.我们叫关闭指令port. & ...

  6. NeHe OpenGL lession 4

    // lession4.c #include <OpenGL/OpenGL.h> #include <GLUT/GLUT.h> #include <stdio.h> ...

  7. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码

    如有疑问请联系:QQ936467727 需要注意的几点问题: 1.密钥是http://lbsyun.baidu.com/apiconsole/key申请的,密钥类型是浏览器端 2.geotable_i ...

  8. Java控制台输入ScannerDemo

  9. Android 中文API (65) —— BluetoothClass[蓝牙]

    前言 本章内容是android.bluetooth.BluetoothClass,为Android蓝牙部分的章节翻译.用于描述远端设备的类型,特点等信息,通过getBluetoothClass()方法 ...

  10. wpf全局异常

    在App.xaml文件中 添加DispatcherUnhandledExceptionEventArgs 新增对应事件