• 【HDOJ】2822 Dogs


    bfs.

     1 /* 2822 */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <cstdlib>
     6 #include <queue>
     7 using namespace std;
     8 
     9 #define MAXN 1005
    10 #define INF 0xffffff
    11 
    12 typedef struct node_t {
    13     int d, x, y;
    14     node_t() {}
    15     node_t(int xx, int yy, int dd) {
    16         x = xx; y = yy; d = dd;
    17     }
    18     friend bool operator <(node_t a, node_t b) {
    19         return a.d > b.d;
    20     }
    21 } node_t;
    22 
    23 int visit[MAXN][MAXN];
    24 char map[MAXN][MAXN];
    25 int n, m;
    26 int bx, by, ex, ey;
    27 int dir[4][2] = {
    28     -1,0,1,0,0,1,0,-1
    29 };
    30 
    31 inline bool check(int x, int y) {
    32     return x<0 || x>=n || y<0 || y>=m;
    33 }
    34 
    35 int bfs() {
    36     int x = bx, y = by, d = 0;
    37     int i, j, k;
    38     priority_queue<node_t> Q;
    39     node_t nd;
    40     
    41     Q.push(node_t(x, y, d));
    42     visit[x][y] = 0;
    43     
    44     while (!Q.empty()) {
    45         nd = Q.top();
    46         if (nd.x==ex && nd.y==ey)
    47             return nd.d;
    48         Q.pop();
    49         for (i=0; i<4; ++i) {
    50             x = nd.x + dir[i][0];
    51             y = nd.y + dir[i][1];
    52             if (check(x, y))
    53                 continue;
    54             if (map[x][y] == 'X')
    55                 d = nd.d;
    56             else
    57                 d = nd.d + 1;
    58             if (d < visit[x][y]) {
    59                 visit[x][y] = d;
    60                 Q.push(node_t(x, y, d));
    61             }
    62         }
    63     }
    64     
    65     return 0;
    66 }
    67 
    68 int main() {
    69     int i, j, k;
    70     
    71     #ifndef ONLINE_JUDGE
    72         freopen("data.in", "r", stdin);
    73     #endif
    74     
    75     while (scanf("%d %d", &n, &m)!=EOF && (n||m)) {
    76         for (i=0; i<n; ++i) {
    77             scanf("%s", map[i]);
    78             for (j=0; j<m; ++j)
    79                 visit[i][j] = INF;
    80         }
    81         scanf("%d%d%d%d",&bx,&by,&ex,&ey);
    82         --bx; --by; --ex; --ey;
    83         k = bfs();
    84         printf("%d
    ", k);
    85     }
    86     
    87     return 0;
    88 }
  • 相关阅读:
    基于Yarp实现内网http穿透
    让Github畅通无阻,FastGithub1.0.0发布
    Pipeline模式与Factory+Provider模式的应用
    开源FastGithub
    开源Influxdb2高性能客户端
    开源AwaitableCompletionSource,用于取代TaskCompletionSource
    SourceGenerator入门指北
    dotnet高性能buffer
    CURL用法
    Nginx的进程管理与重载原理
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4290581.html
Copyright © 2020-2023  润新知