()HDU 1548 BFS 广度优先搜索
2013-06-23 12:23
323 查看
#include<stdio.h> #include<queue> using namespace std; int flag[210],data[210]; //flag用来标记当前楼梯所在层数是否已经搜索过。如果已经搜索过就不再加入队列中。 //避免重复的搜索 int N,A,B; struct Node{ int cur;//当前所在的楼梯层 int num;//次数 }; //BFS int search(){ Node t,temp; t.cur=A; t.num=0; queue<Node> Q; Q.push(t); flag[A]=1; int up,down; while(!Q.empty()){ temp = Q.front(); Q.pop(); if(temp.cur==B)return temp.num;//到达目的,返回次数 up=temp.cur+data[temp.cur];//向上 if(flag[up]==0 && up<=N){//是否可以向上走 flag[up]=1; t.cur=up; t.num=temp.num+1; Q.push(t); } down=temp.cur-data[temp.cur];//向下 if(flag[down]==0 && down>0){//是否可以向下走 flag[down]=1; t.cur=down; t.num=temp.num+1; Q.push(t); } } return -1;//无法达到 } int main(){ int i; while(scanf("%d",&N)&&N){ memset(flag,0,sizeof(flag)); scanf("%d%d",&A,&B); for(i=1;i<=N;i++){ scanf("%d",&data[i]); } printf("%d\n",search()); } return 0; }
#include<queue>
#include<queue>
详细用法:
定义
显示第一个元素
M.front()一个queue的变量 queue<Type> M
查看是否为空范例 M.empty() 是的话返回1,不是返回0;
从已有元素后面增加元素 M.push()
输出现有元素的个数 M.size()
显示最后一个元素 M.back()
清除第一个元素 M.pop()
相关文章推荐
- HDU 1242 Rescue (BFS(广度优先搜索))
- HDU 1548 A strange lift (简单最短路或BFS)
- HDU 1548 A strange lift (BFS)
- HDU-1548--A strange lift--(BFS,剪枝)
- hdu 1548 简单bfs。。。
- HDU-1548 A strange lift(单源最短路 或 BFS)
- HDU 1548 - A strange lift(BFS)
- hdu 1548 BFS
- HDU 1548 A strange lift(bfs)
- [最短路径、BFS] HDU 1548 - A strange lift
- HDU 1548 A strange lift(BFS)
- HDU 1548 A strange lift(BFS)
- 【BFS/Dijkstra】hdu 1548 A Strange Lift
- hdu 1548 A strange lift (BFS)
- HDU-1548 A strange lift(最短路[Spfa || BFS])
- HDU 1548 A strange lift 奇怪的电梯(BFS,水)
- HDU 1104 Remainder( BFS(广度优先搜索))
- hdu 1548 最短路||bfs
- HDU 1072 Nightmare(bfs 广度优先搜索)
- HDU 1548 A strange lift (BFS或最短路)