首页 > 代码库 > 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 }
View Code