最优乘车


题目描述
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;
}

isdigit() 介绍

[BFS]最优乘车的更多相关文章

  1. 1722 最优乘车 1997年NOI全国竞赛

    题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...

  2. noi 1997 最优乘车

    H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终 ...

  3. HN0I2000最优乘车 (最短路变形)

    HN0I2000最优乘车 (最短路变形) 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! [试题]为了简化城市公共汽车收费系 ...

  4. AcWing 920. 最优乘车

    H城是一个旅游胜地,每年都有成千上万的人前来观光. 为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路. 每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站, ...

  5. 题解【洛谷P5767】[NOI1997]最优乘车

    题面 一道很经典的最短路模型转换问题. 考虑如何建图. 我们可以发现,对于每一条公交线路,可以将这条线路上 可以到达的两个点 连一条权值为 \(1\) 的边. 获取一条公交线路上的每一个点可以使用读取 ...

  6. 【SSL1194】最优乘车

    题面: 正文: 把每个边用链式前向星存起来,边权为\(1\),就可以愉♂快♂地最短路了

  7. 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 ...

  8. nyoj 1238(BFSor最短路)

    最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...

  9. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

随机推荐

  1. 「NGK每日快讯」2021.2.1日NGK公链第90期官方快讯!

  2. 为什么空投总是抢不到?大神教你狂撸SPC!

    为什么空投总是抢不到?你是否总有这样的疑虑.明明现在区块链市场中空投项目这么多,明明身边的朋友都抢到了空投,明明人家都已经躺赚百万千万,为何只有我,什么都没抢到.今天,本文将教你如何抢空投,成为下一个 ...

  3. 使用hive增量更新

    目录 1.增量更新 2.对第一种情况 2.1.准备工作 2.2.更新数据 3.对第二种情况 3.1.准备工作 3.2.方法1 3.3.方法2 参考文末文章,加上自己的理解. 1.增量更新 有一个 ba ...

  4. 微信小程序:上滑触底加载下一页

    给商品列表页面添加一个上滑触底加载下一页的效果,滚动条触底之后就发送一个请求,来加载下一页数据, 先在getGoodsList中获取总条数 由于总页数需要再另外的一个方法中使用,所以要把总页数变成一个 ...

  5. Dubbo之高级特性

    Dubbo 注意当启动服务时,该服务会占用本机一个端口号,故在一台电脑启动多个服务时需要在配置文件中更占用本机的端口号 <!--服务占用本机的端口-当本机启动多个服务时须保持不同--> & ...

  6. 更换 grub 主题

    默认的 grub 界面比较简陋 然后突然有想法了,想换个主题 具体操作 1.下载 grub 主题包 去这个地址下载主题(应该是这个地址): https://www.gnome-look.org/bro ...

  7. CSS:CSS基础

    和 HTML 类似,CSS 也不是真正的编程语言,甚至不是标记语言.它是一门样式表语言,这也就是说人们可以用它来选择性地为 HTML 元素添加样式. CSS规则集 选择器(Selector):元素的名 ...

  8. 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归

    剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...

  9. HDOJ-1754(线段树+单点更新)

    I Hate It HDOJ-1754 这道题是线段树简单的入门题,只是简单考察了线段树的基本使用,建树等操作. 这里需要注意的是输入要不使用scanf要不使用快速输入. 这里的maxs数组需要开大一 ...

  10. HDOJ-6656(数论+逆元)

    Kejin Player HDOJ-6656 设f[i]为从i升级到i+1期望需要的金钱,由于每级都是能倒退或者升级到i+1,所以询问从l,r的期望金钱可以直接前缀和,那么推导每一级升级需要的期望钱也 ...