UVALive7015(bfs求最短路)
来源:互联网 发布:网络专业课程 编辑:程序博客网 时间:2024/05/21 22:25
https://vjudge.net/contest/181467#problem/D(uvalive7015 点击打开题目链接)
思路:bfs求最短路
分析:二维数组,将可以一次到达的楼层直接做标记(一开始想的是直接把楼层之间的距离作为一个权值,但是自己写不出来。。。),起点作为第一个元素存入队列,遍历存入的所有点,如果两个点之间可以直接到达,并且第二个点到目前为止是第一次到达,或者从第一个点到第二个点,比从其他路径到第二个点更近,就更新到第二个点的距离(或者说时间),最后输入重点对应的时间就好。一遍bfs,会把起点到其他所有可以到达的点的最短距离都求出来,最后输出目标点的就好。
(真心佩服人家清晰的思路。。。)
代码:
#include <iostream>#include <string>#include <cstring>#include <algorithm>#include <cstdio>#include <queue>using namespace std;const int maxn = 150 + 10;int arr[maxn][maxn];int a[maxn],book[maxn];int n,start,ed;queue<int> q;void bfs(){ q.push(start); book[start] = 0; while(!q.empty()) { int tmp = q.front(); q.pop(); for(int i = 0;i < maxn;i++) { //tmp和i之间有边,而且i没走过或者经过tmp到i比从其他的途径到i的时间要少 if(arr[tmp][i] && (book[i] == -1 || book[tmp] + abs(tmp - i) < book[i])) { book[i] = book[tmp] + abs(tmp - i); q.push(i); } } }}int main(){ while(scanf("%d%d%d",&n,&start,&ed) && (n || start || ed)) { memset(book,-1,sizeof(book));//不能初始化为0,因为后面可能会出现刚好为0的情况 memset(arr,0,sizeof(arr)); memset(a,0,sizeof(a)); for(int i = 1;i <= n;i++) { int m; //一开始不懂为什么要在这里输入a[0],看了下面的代码后真的佩服人家的思维 scanf("%d%d",&m,&a[0]); for(int j = 1;j < m;j++) { scanf("%d",&a[j]); arr[a[j]][a[j-1]] = arr[a[j-1]][a[j]] = 1; } } bfs(); printf("%d\n",book[ed]); }}
- 一般可以用bfs写的题差不多也可以用dfs写,dfs怎么写还得想想。。。
阅读全文
0 0
- UVALive7015(bfs求最短路)
- 魔戒-BFS求最短路
- hdu 2354(bfs求最短路)
- POJ2243 Knight moves (BFS求最短路)
- poj 2215 bfs求最短路
- hdu 1242 用bfs求最短路
- POJ2251(BFS求最短路)
- POJ 3170(bfs求最短路)
- ACM-icpc---bfs求最短路
- BFS(广搜)算法与模板 bfs求最短路
- dfs求连通性,bfs求迷宫最短路
- poj 3126 Prime Path bfs求最短路
- hdu 3760(2次bfs求最短路)
- poj3984~用bfs求最短路~同时记录路径
- AC自动机+状态压缩dp+BFS求最短路+hdu3247
- POJ2225 Asteroids! (三维的BFS求最短路)
- HDU 1495 非常可乐 (BFS求最短路)
- uva 532 Dungeon Master —— BFS(求最短路)
- 浏览器如何向服务器发出请求
- Java如何实现对Mysql数据库的行锁
- cloudera安装过程报错:Your password does not satisfy the current policy requirements
- Android 查看Sqlite数据库数据
- C++ Primer 第三章 字符串、向量和数组
- UVALive7015(bfs求最短路)
- Hbase伪分布式快速安装+shell简单访问
- Python 代码分析工具:PyChecker、Pylint,简解
- Node.Js
- [JZOJ5335] 早苗
- 计算机系统概论
- 产品工程源代码调试之关注点1
- Linux用户组及用户的管理
- 多线程——worker-master模式