首页 > 代码库 > HDU 1242
HDU 1242
简单题
1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 using namespace std; 5 6 const int MAX=205; 7 const int inf=1000000; 8 int tim[MAX][MAX]; 9 char maze[MAX][MAX];10 int n,m;11 int ai,aj;12 typedef struct c{13 int i,j,ti;14 bool operator <(const c &A)const {15 if(ti>A.ti) return true;16 return false;17 }18 }Node;19 Node tmp,pushed;20 priority_queue<Node>que;21 int dir[4][2]={0,1,0,-1,1,0,-1,0};22 23 bool ok(int i,int j){24 if(i>=0&&i<n&&j>=0&&j<m&&maze[i][j]!=‘#‘)25 return true;26 return false;27 }28 29 bool bfs(){30 int ti,tj;31 while(!que.empty()){32 tmp=que.top();33 que.pop();34 if(maze[tmp.i][tmp.j]==‘r‘){35 printf("%d\n",tmp.ti);36 return true;37 }38 for(int i=0;i<4;i++){39 ti=tmp.i+dir[i][0];40 tj=tmp.j+dir[i][1];41 if(ok(ti,tj)){42 if(maze[ti][tj]==‘.‘||maze[ti][tj]==‘r‘){43 if(tmp.ti+1<tim[ti][tj]){44 tim[ti][tj]=tmp.ti+1;45 pushed.i=ti; pushed.j=tj; pushed.ti=tmp.ti+1;46 que.push(pushed);47 }48 }49 else if(maze[ti][tj]==‘x‘){50 if(tmp.ti+2<tim[ti][tj]){51 tim[ti][tj]=tmp.ti+2;52 pushed.i=ti; pushed.j=tj; pushed.ti=tmp.ti+2;53 que.push(pushed);54 }55 }56 }57 }58 }59 return false;60 }61 62 int main(){63 while(scanf("%d%d",&n,&m)!=EOF){64 for(int i=0;i<n;i++){65 scanf("%s",maze[i]);66 for(int j=0;j<m;j++){67 if(maze[i][j]==‘a‘){68 ai=i; aj=j;69 }70 tim[i][j]=inf;71 }72 }73 tim[ai][aj]=0;74 tmp.i=ai; tmp.j=aj; tmp.ti=0;75 que.push(tmp);76 if(!bfs()){77 printf("Poor ANGEL has to stay in the prison all his life.\n");78 }79 while(!que.empty())80 que.pop();81 }82 return 0;83 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。