HDU 1242 Rescue BFS+优先队列

题目链接:点击打开链接?pid=1242

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>using namespace std;const int N=220;int n,m,stx,sty,endx,endy;char mp[N][N];int vis[N][N]; int f[4][2]={{0,-1},{-1,0},{0,1},{1,0}};//kengstruct node{int x;int y;int t; friend bool operator < (const node &a,const node &b) {return a.t>b.t;//大于是从小往大排 }} ;bool isbound(int x,int y){if(x>0&&x<=n&&y>0&&y<=m&&mp[x][y]!='#')return true;elsereturn false;}void BFS(int x,int y){priority_queue<node>Q;memset(vis,0,sizeof(vis));while(!Q.empty()){Q.pop();}node p,q;p.x=x;p.y=y;p.t=0;vis[p.x][p.y]=1;Q.push(p); while(!Q.empty()){p=Q.top();Q.pop() ;if(p.x==endx&&p.y==endy){printf("%d\n",p.t);return;}for(int i=0;i<4;i++){q.x=p.x+f[i][0];q.y=p.y+f[i][1];if(!isbound(q.x,q.y)) continue;if(vis[q.x ][q.y ]==1) continue;vis[q.x ][q.y]=1;if(mp[q.x ][q.y]=='x')q.t =p.t + 2;elseq.t =p.t + 1;Q.push(q);}}printf("Poor ANGEL has to stay in the prison all his life.\n");}int main(){while(~scanf("%d%d",&n,&m)) {for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>mp[i][j];if(mp[i][j]=='r'){stx=i;sty=j;}else if(mp[i][j]=='a'){endx=i;endy=j;}}}BFS(stx,sty);}return 0;}

版权声明:本文为博主原创文章,,未经博主允许不得转载。

可以以心感悟,以此沉淀,足矣;耳听佳音,目极美好,

HDU 1242 Rescue BFS+优先队列

相关文章:

你感兴趣的文章:

标签云: