您现在的位置是:首页 > 数码 > 

SDUT OJ 图练习

2025-07-27 23:24:07
SDUT OJ 图练习 图练习-BFS-从起点到目标点的最短步数   Time Limit: 1000ms   Memory limit: 6556K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫。在他们所在的地域,有n个隘口,编号为1..n,某些

SDUT OJ 图练习

图练习-BFS-从起点到目标点的最短步数

 

Time Limit: 1000ms   Memory limit: 6556K  有疑问?点这里^_^

题目描述

在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫。在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的。其中近卫军团在1号隘口,天灾军团在n号隘口。某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河。但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否可以通过隘口及其相关通道到达近卫军团展开攻击;如果可以的话,最少需要经过多少通道。由于n的值比较大(n<=100000),于是巫妖王到了擅长编程的你 =_=,请你帮他解决这个问题,否则就把你吃掉变成他的魔法。为了拯救自己,赶紧想办法吧。

输入

输入包含多组,每组格式如下。 第一行包含两个整数n(n <= 100000),m(m <= 200000)(分别代表n个隘口,这些隘口之间有m个通道)。 下面m行每行包含两个整数a,b;表示从a出发有一条通道到达b隘口(注意:通道是双向的)。

输出

如果天灾军团可以不修建任何通道就到达1号隘口,那么输出最少经过多少通道,否则输出O。

示例输入

2 1
1 2
2 1
2 1

示例输出

1
1

代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;vector<int>q[100001];//基于vector二维数组的BFS模拟遍历void BFS(int n)
{bool vis[100001];memset(vis, false, sizeof(vis));queue<int>p;p.push(n);vis[n]=true;int dd;vector<int>::iterator it;int flag=0;int cnt[100001];memset(cnt, 0, sizeof(cnt));while(!()){dd=p.front();p.pop();for(it=q[dd].begin(); it!=q[dd].end(); it )   {if(vis[*it]==false){cnt[*it]=cnt[dd]1;p.push(*it);vis[*it]=true;if(*it==1){flag=1; break;}}}if(flag==1)break;}if(flag==0 )printf(O\n);elseprintf(%d\n, cnt[1] );
}int main()
{int n, m;int u, v;int i, j;while(scanf(%d %d, &n, &m)!=EOF){for(i=0; i<=100000; i){q[i].clear();}for(i=0; i<m; i){scanf(%d %d, &u, &v );q[u].push_back(v);q[v].push_back(u);}BFS(n);}return 0;
} /**************************************Problem id	: SDUT OJ 280 Result		: Accepted Take Memory	: 812K Take Time	: 460MS Submit Time	: 2015-01-18 09:9:14  
**************************************/

 

转载于:.html

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/845619.html

相关标签:无
上传时间: 2024-02-05 12:11:57
留言与评论(共有 20 条评论)
本站网友 浦东星河湾
30分钟前 发表
6556K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫
本站网友 525252
2分钟前 发表
由于n的值比较大(n<=100000),于是巫妖王到了擅长编程的你 =_=,请你帮他解决这个问题,否则就把你吃掉变成他的魔法
本站网友 ie8卸载
27分钟前 发表
其中近卫军团在1号隘口,天灾军团在n号隘口
本站网友 上海大宁瑞仕花园
8分钟前 发表
其中近卫军团在1号隘口,天灾军团在n号隘口
本站网友 哈尔滨二手房出售信息
20分钟前 发表
2015-01-18 09
本站网友 水痘的症状图片
6分钟前 发表
输出 如果天灾军团可以不修建任何通道就到达1号隘口,那么输出最少经过多少通道,否则输出O
本站网友 平陆租房信息
24分钟前 发表
但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否可以通过隘口及其相关通道到达近卫军团展开攻击;如果可以的话,最少需要经过多少通道
本站网友 南朗二手房
23分钟前 发表
m;int u
本站网友 mederma
13分钟前 发表
&u
本站网友 80后创业者
8分钟前 发表
812K Take Time
本站网友 创意家居产品
4分钟前 发表
某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河
本站网友 sniffer下载
13分钟前 发表
输入 输入包含多组,每组格式如下
本站网友 美好家园网
30分钟前 发表
6556K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫
本站网友 南广学院
1分钟前 发表
sizeof(cnt));while(!()){dd=p.front();p.pop();for(it=q[dd].begin(); it!=q[dd].end(); it ) {if(vis[*it]==false){cnt[*it]=cnt[dd]1;p.push(*it);vis[*it]=true;if(*it==1){flag=1; break;}}}if(flag==1)break;}if(flag==0 )printf(O\n);elseprintf(%d\n
本站网友 盲人方阵
1分钟前 发表
m;int u
本站网友 宣美
29分钟前 发表
sizeof(vis));queue<int>p;p.push(n);vis[n]=true;int dd;vector<int>
本站网友 十二个为什么
9分钟前 发表
但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否可以通过隘口及其相关通道到达近卫军团展开攻击;如果可以的话,最少需要经过多少通道
本站网友 美景集团
20分钟前 发表
14 **************************************/   转载于
本站网友 近视眼矫正手术
3分钟前 发表
460MS Submit Time