[BFS]最优乘车
最优乘车
题目描述
HH 城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。
一名旅客最近到 HH 城旅游,他很想去 SS 公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达 SS 公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达 SS 公园。
现在用整数 1 , 2 , … , N1,2,…,N 给 HH 城的所有的巴士站编号,约定这名旅客所在饭店的巴士站编号为 1 … S1…S 公园巴士站的编号为 NN 。
写一个程序,帮助这名旅客寻找一个最优乘车方案,使他在从饭店乘车到 SS 公园的过程中换车的次数最少。
输入格式
第一行有两个数字 MM 和 NN ( 1 \le M \le 100 1≤M≤100 , 1 < N \le 500 1<N≤500),表 示开通了 MM 条单程巴士线路,总共有 NN 个车站。
从第二行到第 MM 行依次给出了第 11 条到第 MM 条巴士线路的信息。其中第 i+1i+1 行给出的是第 ii 条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号相邻两个站号之间用一个空格隔开。
输出格式
只有一行。如果无法乘巴士从饭店到达 SS 公园,则输出 N0,否则输出你的程序所找到的最少换车次数,换车次数为 00 表示不需换车即可到达•。
输入输出样例
输入 #1
3 7
6 7
4 7 3 6
2 1 3 5
输出 #1
2
代码
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char x;
bool f[10005]={false}; //用于判断这个站点有没有走过
int n,m,a[1005],bus[10005][10005],st[10005],fa[10005];
void bfs(){
int head=0,tail=1;
st[1]=-1;fa[1]=1;f[1]=true; //st用于储存第i个站点转了多少次站
do{
head++;
for(int i=1;i<=n;i++){
if(bus[fa[head]][i] and !f[i]){
tail++;
f[i]=true; //标记已经走过
st[i]=st[fa[head]]+1;
fa[tail]=i;
}
}
if(f[n])break; //判断有没有走都目标点
}while(head<tail);
if(head==tail)printf("NO");
else printf("%d",st[n]);
}
int main(){
scanf("%d%d",&m,&n);
for(int i=0;i<=m;i++){
memset(a,0,sizeof(a));
a[0]=1;
do{ //快读
x=getchar();
if (isdigit(x)) a[a[0]]=a[a[0]]*10+x-48;
else ++a[0];
}while (x!='\n'&& x!=EOF); a[0]--;
for(int j=1;j<=a[0]-1;j++)
for(int k=j+1;k<=a[0];k++)
bus[a[j]][a[k]]=1; //先做预处理
}
if(n==1){
printf("0");
return 0;
}
bfs();
return 0;
}
[BFS]最优乘车的更多相关文章
- 1722 最优乘车 1997年NOI全国竞赛
题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...
- noi 1997 最优乘车
H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终 ...
- HN0I2000最优乘车 (最短路变形)
HN0I2000最优乘车 (最短路变形) 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! [试题]为了简化城市公共汽车收费系 ...
- AcWing 920. 最优乘车
H城是一个旅游胜地,每年都有成千上万的人前来观光. 为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路. 每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站, ...
- 题解【洛谷P5767】[NOI1997]最优乘车
题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...
- 【SSL1194】最优乘车
题面: 正文: 把每个边用链式前向星存起来,边权为\(1\),就可以愉♂快♂地最短路了
- PAT Advanced 1076 Forwards on Weibo (30) [图的遍历,BFS,DFS]
题目 Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and ...
- nyoj 1238(BFSor最短路)
最少换乘 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...
- nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)
题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...
随机推荐
- npx & yarn & npm
npx & yarn & npm React Redux App https://reactjs.org/ https://github.com/facebook/create-rea ...
- push notifications
push notifications https://developers.google.com/web/fundamentals/push-notifications/ Push API https ...
- Flutter 区分开发环境和生产环境
Uri _baseUrl; final isProd = const bool.fromEnvironment('dart.vm.product'); if (isProd) { _baseUrl = ...
- Masterboxan INC :个股出现疯涨,投资者需警惕股市泡沫
随着标普500指数自去年三月以来的暴涨,引发了很多亏损企业股价飙升,同时许多场外投资者盲目跟风,加剧了个股的疯涨.对于此现象,美国万事达资产管理有限公司不得不多次发文提醒投资者:个股出现疯涨,投资者需 ...
- Baccarat流动性挖矿的收益能否持续?该如何参与Baccarat流动性挖矿?
2020年DeFi市场火热,众多投资机构纷纷入场,分享这场资本盛宴.然而,目前市面上大多数DeFi项目手续费高昂,小资金的投资者无法入市.为了让更多的用户参与其中,NGK推出了Baccarat流动性挖 ...
- NGK公链:去中心化交易+挖矿生态体系共舞
NGK生态公链是一个安全.透明.专业的去中心化商业应用平台.作为一条具有技术信任甚至是公众信任的公链,NGK以区块链技术为支撑,利用区块链透明.公正.公开.数据不可篡改.分布式存储.可追溯等技术优势, ...
- 内存包装类 Memory 和 Span 相关类型
1. 前言 2. 简介 3. Memory<T>和Span<T>使用准则 3.1. 所有者, 消费者和生命周期管理 3.2. Memory<T> 和所有者/消费者模 ...
- C++算法代码——卡片游戏
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?cid=1397&pid=2 题目描述 桌上有一叠牌,从第一张牌(即位于顶面的牌)开始 ...
- 高性能环形队列框架 Disruptor 核心概念
高性能环形队列框架 Disruptor Disruptor 是英国外汇交易公司LMAX开发的一款高吞吐低延迟内存队列框架,其充分考虑了底层CPU等运行模式来进行数据结构设计 (mechanical s ...
- 线上CPU飙升100%问题排查
本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考 ...