题目分析


来源:acwing

分析:

本题难在抽象建图上,这里采用的建图方式是:同一条公交线路上,前面的站点都可以连一条有向边到其后面的站点,且边权都为1.

由于边权都是1,可以用bfs来求最短路。
注意,这样求出来的是坐了几辆公交车,如果算换成次数的话,需要-1.

另外,由于每行的公交站点数未给出,这里一行一行地读,使用getline(cin, line);然后 通过库stringstream来进行切割,stringstream ssin(line); 确定每行共有多少个以空格分隔的数据:while(ssin >> 变量) cnt ++;

此题建图参考,这道PAT的题目更难一些:PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N  = 510;int dist[N];
bool st[N];
int q[N];bool g[N][N];
int stop[N]; // 暂存某条公交线路的站点
int n, m;void bfs(){int hh = 0, tt = 0;memset(dist, 0x3f, sizeof dist);dist[1] = 0;q[0] = 1;while( hh <= tt){int t= q[hh++];for(int i = 1; i<= n; i ++){if(g[t][i] && dist[i] > dist[t] + 1){dist[i] = dist[t] + 1;q[ ++ tt] = i;}}}
}
int main(){cin >> m >> n;getchar();string line;for(int i = 1; i<= m; i++){getline(cin, line);stringstream ssin(line);int cnt = 0; // 公交线路站牌数量int p;while(ssin >> p)  stop[cnt++]  = p;for(int j = 0;  j< cnt ;j ++)for(int k = j + 1; k < cnt; k ++)g[stop[j]][stop[k]] = true;}bfs();if(dist[n] == 0x3f3f3f3f) cout << "NO" << endl;else cout << dist[n] -1  << endl;
}

题目来源

https://www.acwing.com/problem/content/922/

算法提高课-图论-单源最短路的建图方式-AcWing 920. 最优乘车:bfs求最短路、建图相关推荐

  1. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合

    题目分析 来源:acwing 分析: 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路.存在二维数组dist[6][N]中 dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通 ...

  2. 算法提高课-图论-单源最短路的建图方式-AcWing 1128. 信使:dijkstra、 最短路取最大值

    题目分析 来源:acwing 分析:广播模型,求整个网络所有点都被广播到,需要多少时间. 本题核心:对于每个点来说,它接收到信的时间,是等于它到指挥部的最短距离. 所以,所有点被广播到,就是求指挥部到 ...

  3. 算法提高课-图论-单源最短路的建图方式-AcWing 1127. 香甜的黄油:spfa最短路

    题目分析 来源:acwing 分析: 多源汇最短路.所以我们首先想到的是floyd算法, 可是它的复杂度是O(n3)O(n^3)O(n3),会超时.所以我们需要另外考虑. 任意一个点作为起点求出到所有 ...

  4. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

    题目分析 来源:acwing 分析: 道路:双向,边权非负, 航线:单向,边权可正可负,且无环. 根据题意,点可以分为很多团(连通块),团内部只有道路(道路是双向的,而且是连通的,所以不能存在航线,否 ...

  5. 算法提高课-图论-单源最短路的建图方式-AcWing 903. 昂贵的聘礼:建图巧妙、dijkstra、考虑等级

    题目分析 来源:acwing 由于终点是1号节点,建立虚拟节点S,如下建图(根据样例画图).S出发和每个点直连的边权代表直接买该物品花的金币数:而由S到1的任意一条通路,边权之和就是花费的金币数.所以 ...

  6. 算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点

    题目分析 来源:acwing 分析: 本题有多组测试数据,如果对每个源点暴力使用dijkstra,会超时. 好的做法:建立虚拟源点S,让S到所有真实起点的边权为0,这样原问题就可以转换为从虚拟源点S到 ...

  7. 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路

    题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...

  8. 算法提高课-图论-单源最短路的建图方式-AcWing 1129. 热浪:dijkstra裸题

    题目分析 来源:acwing 分析: ac代码 朴素的dijkstra() ,时间复杂度O(n2)O(n^2)O(n2) #include<bits/stdc++.h> using nam ...

  9. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...

最新文章

  1. 博士一次性最高给140万安家费!还享副教授待遇,这所高校为了引进人才!拼了...
  2. Unable to find remote helper for 'https'解决办法
  3. python树莓派设备_Python+树莓派制作IoT(物联网)门控设备
  4. vlan划分不能上网_VLAN工作原理
  5. ios控制ios_iOS UIMenuController UIMenuItem
  6. 一种全新易用的基于Word-Word关系的NER统一模型,刷新了14种数据集并达到新SoTA...
  7. 1208_MISRA_C规范学习笔记_Rule 10.3 Rule 10.5
  8. c语言代码大全复制,垃圾回收算法实现之 - 复制算法(完整可运行C语言代码)...
  9. 华为鸿蒙操作a股,来了!华为“鸿蒙” 这一次它会给A股带来哪些惊喜
  10. OS - freeRTOS vs Linux
  11. 信息系统分析与设计 机票预定管理系统
  12. 伯特兰·阿瑟·威廉·罗素
  13. HTTP状态码(查询专用)
  14. C语言 10_随机数
  15. DP专题考试总结(4)
  16. B. Nezzar and Lucky Number
  17. python list元素类型_阿博的Python之路-详解List数据类型
  18. 2020年末的一些职业规划思考
  19. ssm校园兼职招聘系统计算机毕业设计
  20. 作文 深海机器人_海底机器人作文500字

热门文章

  1. 一个可以设置中奖概率的抽奖程序[转]
  2. 面试之BI-SQL--table转换
  3. xx is not in the sudoers file 问题解决
  4. silverlight turntable
  5. 【转载】说说大型高并发高负载网站的系统架构
  6. linux 文泉驿正黑字体,文泉驿字体系列打包下载-文泉驿字体下载-西西软件下载...
  7. springboot的jsp应该放在哪_自己账户里应该持有几只股票
  8. 大连大学计算机科学与技术考研真题,2016年大连大学计算机科学与技术数据库系统原理复试笔试最后押题五套卷...
  9. 基于单片机的c语言倒计时程序,30秒倒计时c语言51单片机实现.doc
  10. class 第一个元素_第二章(第3节):网页元素定位和操作