首页 > 其他 > 详细

HDU 1242

时间:2014-06-20 14:04:54      阅读:416      评论:0      收藏:0      [点我收藏+]

简单题

bubuko.com,布布扣
 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

 

HDU 1242,布布扣,bubuko.com

HDU 1242

原文:http://www.cnblogs.com/jie-dcai/p/3795591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!