广搜+优先队列-hdu-Rescue
2015-01-10 10:22
281 查看
传说中的最裸,广搜+优先队列点击打开题目链接
//r为起点,a为终点,x为士兵,需要花费1分钟杀死,每移动一格需要1分钟
#include<stdio.h> #include<string.h> #include<queue> using namespace std; int M,N; char map[205][205]; int flag[205][205]; int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; struct Info { int x,y,time; bool operator <(const Info &d)const { return d.time<time; } }; priority_queue<Info> pq; void bfs() { int i; while(!pq.empty()) { Info v=pq.top(); pq.pop(); if(map[v.x][v.y]=='a') { printf("%d\n",v.time); return; } for(i=0;i<4;i++) { int xx=v.x+dir[i][0]; int yy=v.y+dir[i][1]; if(xx>=0&&xx<M&&yy>=0&&yy<N&&!flag[xx][yy]&&map[xx][yy]!='#') { flag[xx][yy]=1; Info f; f.x=xx; f.y=yy; if(map[xx][yy]=='x') f.time=v.time+2; else f.time=v.time+1; pq.push(f); } } } printf("Poor ANGEL has to stay in the prison all his life.\n"); } int main() { int i,j,len,i1,j1; while(scanf("%d%d",&M,&N)!=EOF) { memset(flag,0,sizeof(flag)); while(!pq.empty()) pq.pop(); for(i=0;i<M;i++) { scanf("%s",map[i]); len=strlen(map[i]); for(j=0;j<len;j++) { if(map[i][j]=='r') { i1=i; j1=j; } } } Info u; u.x=i1; u.y=j1; u.time=0; flag[i1][j1]=1; pq.push(u); bfs(); } return 0; }
相关文章推荐
- hdu 1242 Rescue(BFS,优先队列,基础)
- HDU 1242 Rescue(BFS+【优先队列】)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- hdu1242 Rescue(BFS +优先队列 or BFS )
- hdu-1242-Rescue(优先队列 BFS)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- 【搜索入门专题1】 hdu1242 J - Rescue c++ stl容器之优先队列+BFS
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- HDU 1242 Rescue【优先队列】
- HDU 1242 Rescue【优先队列BFS】
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- HDU 1242 Rescue (第一道优先队列+BFS)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- hdu1242 Rescue(BFS +优先队列 or BFS )
- hdu 1242 rescue (优先队列 bfs)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- HDU 1242 Rescue【BFS+优先队列】
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- hdu 1242 Rescue(优先队列 && 广搜BFS)