杭电1242Rescue题(bfs+优先队列)
来源:互联网 发布:java调用命令行 编辑:程序博客网 时间:2024/05/21 19:22
杭电1242Rescue题(bfs+优先队列)
题目链接~~>
这题是学习优先队列的第一题搞了好久才AC:
先介绍一下优先队列:
头文件:
#include<queue> using namespace std;
由大到小出队:
struct zhang { int x,y; friend bool operator<(const zhang &a,const zhang &b) { return a.x < b.x ; } }; priority_queue<zhang>q; zhang current;
由小到大出队:
将上面的 return a .x < b.x ;中的 "<" 改为 “>” ;但传说中这种方法G++编译器编译不过;
(非本人)代码:
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>#define N 201using namespace std;//优先队列解决,广度优先struct Persion{ int x,y; int time; friend bool operator < (const Persion &a,const Persion &b) { return a.time>b.time; //">" 返回队列中较小的元素;"< " 则返回队列中较大的元素 }};int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};char map[N][N];int visited[N][N];int m,n;int BFS(int x,int y){ priority_queue <Persion>q; Persion current,next; memset(visited,0,sizeof(visited)); current.x=x; current.y=y; current.time=0; visited[current.x][current.y]=1; q.push(current); while(!q.empty()) { current=q.top(); q.pop(); for(int i=0;i<4;i++) { next.x=current.x+dir[i][0]; next.y=current.y+dir[i][1]; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&map[next.x][next.y]!='#'&&!visited[next.x][next.y]) { if(map[next.x][next.y]=='r') return current.time+1; if(map[next.x][next.y]=='x') next.time=current.time+2; else next.time=current.time+1; visited[next.x][next.y]=1; q.push(next); } } } return -1;}int main(){ int i,j; Persion angle; while(cin>>n>>m&&(m||n)) { for(i=0;i<n;i++) for(j=0;j<m;j++) { cin>>map[i][j]; if(map[i][j]=='a') { angle.x=i; angle.y=j; } } int time=BFS(angle.x,angle.y); if(time==-1) cout<<"Poor ANGEL has to stay in the prison all his life."<<endl; else cout<<time<<endl; } return 0;}
- 杭电1242Rescue题(bfs+优先队列)
- 杭电1242-Rescue(bfs+优先队列||队列)
- 【搜索之BFS + 优先队列】杭电 hdu 1242 Rescue
- 杭电1242--Rescue(BFS+优先队列)
- 【杭电oj】1242-Rescue(bfs,优先队列)
- 杭电ACM1242——Rescue~~BFS+优先队列
- 杭电1242--Rescue--BFS 广度优先算法详解
- HDOJ 1242 Rescue (BFS+优先队列)
- hdu 1242Rescue(bfs+优先队列)
- hdu 1242 Rescue (优先队列+bfs)
- HDU 1242 Rescue(BFS +优先队列)
- hdu 1242 Rescue(bfs+优先队列)
- 1242Rescue (优先队列BFS)
- HDU 1242 Rescue 优先队列+BFS
- HDU 1242 Rescue(BFS,优先队列)
- HDU 1242 Rescue(BFS+优先队列)
- hdu-1242-Rescue(优先队列 BFS)
- HDU 1242 Rescue(优先队列 + 多源BFS)
- 《c陷阱与缺陷》笔记--负数的取模运算
- 浅析Java中的反射机制原理
- 一些学习视频教程
- 单源最短路径
- NO3:步履蹒跚-完成第一章节学习
- 杭电1242Rescue题(bfs+优先队列)
- ios 汇编教程
- Mac OS X (Intel) 上安装 Oracle 10g
- CouchDB + Python (window 7)
- Linux sysconf函数
- 是兰大文科楼的辉煌灯火让我找到了自己
- 通过JavaScript使Div居中
- 设计模式之备忘录模式(Memento)
- VS2010出现“为帮助内容存储区指定的位置无效或者您无权访问该位置”的解决办法