zoukankan      html  css  js  c++  java
  • HDU1242 Rescue 简单bfs

    求最小步数

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<cstdlib>  
     5 #include<queue>  
     6 using namespace std;
     7 char map[211][211];
     8 struct node
     9 {
    10     int x,y,step;
    11     friend bool operator<(node a,node b)
    12     {
    13         return a.step>b.step;    
    14     }   
    15 }cur,next;
    16 int ex,ey,sx,sy;
    17 int n,m;
    18 
    19 int bfs(void)
    20 {
    21     priority_queue<node>q;
    22     cur.x=sx;
    23     cur.y=sy;
    24     cur.step=0;
    25     q.push(cur);
    26     while(!q.empty())
    27     {
    28         cur=q.top();
    29         q.pop();
    30         if(cur.x==ex&&cur.y==ey) return 1;
    31         if(cur.x-1>=0&&map[cur.x-1][cur.y]!='#')
    32         {
    33             next=cur;
    34             next.x--;
    35             next.step++;
    36             if(map[next.x][next.y]=='x') next.step++;
    37             q.push(next);
    38             map[next.x][next.y]='#';                                      
    39         }
    40         if(cur.y-1>=0&&map[cur.x][cur.y-1]!='#')
    41         {
    42             next=cur;
    43             next.y--;
    44             next.step++;
    45             if(map[next.x][next.y]=='x') next.step++;
    46             q.push(next);
    47             map[next.x][next.y]='#';                                      
    48         }
    49         if(cur.x+1<n&&map[cur.x+1][cur.y]!='#')
    50         {
    51             next=cur;
    52             next.x++;
    53             next.step++;
    54             if(map[next.x][next.y]=='x') next.step++;
    55             q.push(next);
    56             map[next.x][next.y]='#';                                      
    57         }
    58         if(cur.y+1<m&&map[cur.x][cur.y+1]!='#')
    59         {
    60             next=cur;
    61             next.y++;
    62             next.step++;
    63             if(map[next.x][next.y]=='x') next.step++;
    64             q.push(next);
    65             map[next.x][next.y]='#';                                      
    66         }               
    67     }
    68     return 0;
    69 }
    70 int main()
    71 {
    72     while(scanf("%d %d",&n,&m)!=EOF)
    73     {
    74         for(int i=0;i<n;i++)
    75         {
    76             scanf("%s",&map[i]); 
    77             for(int j=0;j<m;j++)
    78             {
    79                 if(map[i][j]=='r') 
    80                 {
    81                     sx=i;
    82                     sy=j;
    83                 }    
    84                 if(map[i][j]=='a')
    85                 {
    86                     ex=i;
    87                     ey=j;                  
    88                 }    
    89             }
    90         }
    91         if(bfs()) printf("%d
    ",cur.step);
    92         else printf("Poor ANGEL has to stay in the prison all his life.
    ");               
    93     }       
    94 } 
  • 相关阅读:
    Centos7下永久修改mysql5.6最大连接数
    关于Linux fontconfig 字体库的坑
    回收maven私仓过期垃圾数据
    conda python虚拟环境
    小程序分享H5页面
    会看以前的邮箱
    快乐的小程序
    和运营开会的知道的一些点
    V-Distpicker不能完整显示内容
    VUE随手记坑
  • 原文地址:https://www.cnblogs.com/lqquan/p/3688219.html
Copyright © 2011-2022 走看看