A strange lift BNUOJ 5746
来源:互联网 发布:ff14国服数据库 编辑:程序博客网 时间:2024/06/05 15:06
name: A strange lift
ID: BNUOJ 5746
这是一道BFS算法应用的经典入门题型。——最短路
相对DFS的“勇气”来说,BFS作为广度优先搜索,更加注重的是“谨慎”。
整体来说就是BFS最原本的应用,没有进行过多变化,但是有助于理解BFS本身。
思路:
1. 预处理,建立图的模型。把每一层能够到达的层数作为有边可以连接。
2. 使用队列实现BFS(而不必非是优先队列,因为每个点可以有至多两个通路方向,且步数同步)
3. 每次下一组测试数据输入时候,一定要把上次测试的数据清空(…浪费很久)
代码:
#include <cstdio>#include <queue>using namespace std;struct lift { int up; int down; int dis;}g[210];int N, A, B;int w[210];const int INF = 10000;void prework(int size){ for(int j=1; j<=size; j++) { g[j].up = j + w[j]; g[j].down = j - w[j]; g[j].dis = INF; }}void bfs(){ queue<lift> myLift; myLift.push(g[A]); while(!myLift.empty()) { if(g[B].dis!=INF) return; lift temp = myLift.front(); myLift.pop(); if(temp.up>=1 && temp.up<=N && g[temp.up].dis==INF) { g[temp.up].dis = temp.dis + 1; myLift.push(g[temp.up]); } if(temp.down>=1 && temp.down<=N && g[temp.down].dis==INF) { g[temp.down].dis = temp.dis + 1; myLift.push(g[temp.down]); } }}int main() { scanf("%d", &N); while(N!=0) { scanf("%d%d", &A, &B); for(int i=1; i<=N; i++) scanf("%d", &w[i]); prework(N); g[A].dis = 0; bfs(); if(g[B].dis==INF) printf("-1\n"); else printf("%d\n", g[B].dis); scanf("%d", &N); } return 0;}
0 0
- A strange lift BNUOJ 5746
- HDU A strange lift
- HDUOJ1548 A strange lift
- hdu1548 A strange lift
- HDOJ A strange lift
- A strange lift
- A strange lift(BFS)
- A strange lift
- A strange lift
- A strange lift
- HDU1548 A strange lift
- hdu_1548 A strange lift
- HDU A strange lift
- a strange lift
- HDU1548 A strange lift
- poj1548 A strange lift
- A strange lift
- A strange lift
- 将一个字符串,左旋N个字符
- 阶乘的一些规律(编程之美)
- Problem A-1000
- GraphicsMagic安装
- 初步了解ReactJS
- A strange lift BNUOJ 5746
- Nginx配置文件(nginx.conf)配置详解
- HTML5笔试题20道
- DOSBOX运行QBASIC和Turbo PASCAL
- 读《光荣与梦想》四,The Glory and The Dream
- React初步学习
- php中的单引号(int类型和string类型的转换)
- iOS-控件之间的继承
- 交换Button中图片与文字左右位置