• 【HDOJ】1242 Rescue


    BFS+优先级队列。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 #define MAXNUM 205
     8 
     9 typedef struct node_st {
    10     int x, y ,t;
    11     node_st() {}
    12     node_st(int xx, int yy, int tt) {
    13         x = xx; y = yy; t = tt;
    14     }
    15     friend bool operator < (node_st a, node_st b) {
    16         return a.t > b.t;
    17     }
    18 } node_st;
    19 
    20 int n, m;
    21 char map[MAXNUM][MAXNUM];
    22 char visit[MAXNUM][MAXNUM];
    23 int direct[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};
    24 
    25 int bfs(int x, int y) {
    26     priority_queue<node_st> que;
    27     node_st node;
    28     int i, t;
    29     
    30     que.push(node_st(x, y, 0));
    31     memset(visit, 0, sizeof(visit));
    32     visit[x][y] = 1;
    33     
    34     while ( !que.empty() ) {
    35         node = que.top();
    36         if (map[node.x][node.y] == 'a')
    37             return node.t;
    38         que.pop();
    39         t = node.t + 1;
    40         for (i=0; i<4; ++i) {
    41             x = node.x + direct[i][0];
    42             y = node.y + direct[i][1];
    43             if (x<0 || x>=n || y<0 || y>=m)
    44                 continue;
    45             if (visit[x][y] || map[x][y]=='#')
    46                 continue;
    47             if (map[x][y] == 'x')
    48                 que.push(node_st(x,y,t+1));
    49             else
    50                 que.push(node_st(x,y,t));
    51             visit[x][y] = 1;
    52         }
    53     }
    54 
    55     return -1;
    56 }
    57 
    58 int main() {
    59     int i, j, t;
    60     int begx, begy;
    61 
    62     while (scanf("%d %d", &n, &m) != EOF) {
    63         for (i=0; i<n; ++i) {
    64             scanf("%s", map[i]);
    65             for (j=0; j<m; ++j) {
    66                 if (map[i][j] == 'r') {
    67                     begx = i;
    68                     begy = j;
    69                 }
    70             }
    71         }
    72         t = bfs(begx, begy);
    73         if (t == -1)
    74             printf("Poor ANGEL has to stay in the prison all his life.
    ");
    75         else
    76             printf("%d
    ", t);
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    Springboot学习:核心配置文件
    Springboot学习:底层依赖与自动配置的原理
    Springboot学习:介绍与HelloWorld
    js根据时间戳倒计时
    windows phone 豆瓣api的封装
    Android开发初始
    PHP(一)
    程序员修炼之道(一)
    WebClient和HttpReuqest两种网络请求的方式
    黑客与画家(二)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3760826.html
Copyright © 2020-2023  润新知