• 【HDOJ】2612 Find a way


    BFS。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 #define INF 0x3fffffff
     8 
     9 typedef struct node_st {
    10     int x, y, s;
    11     node_st() {}
    12     node_st(int xx, int yy, int ss) {
    13         x = xx; y = yy; s = ss;
    14     }
    15 } node_st;
    16 
    17 char visit[205][205];
    18 char map[205][205];
    19 int step[2][205][205];
    20 int n, m;
    21 int direct[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
    22 
    23 void bfs(int x, int y, int sel) {
    24     int i, s;
    25     queue<node_st> que;
    26     node_st node;
    27 
    28     memset(visit, 0, sizeof(visit));
    29     memset(step[sel], 0, sizeof(step[sel]));
    30     visit[x][y] = 1;
    31     que.push(node_st(x,y,0));
    32 
    33     while ( !que.empty() ) {
    34         node = que.front();
    35         que.pop();
    36         s = node.s + 1;
    37         for (i=0; i<4; ++i) {
    38             x = node.x + direct[i][0];
    39             y = node.y + direct[i][1];
    40             if (x<0 || x>=n || y<0 || y>=m)
    41                 continue;
    42             if (visit[x][y])
    43                 continue;
    44             visit[x][y] = 1;
    45             if (map[x][y] == '#')
    46                 continue;
    47             if (map[x][y] == '@')
    48                 step[sel][x][y] = s;
    49             que.push(node_st(x,y,s));
    50         }
    51     }
    52 }
    53 
    54 int main() {
    55     int i, j, tmp, min;
    56     int yx, yy, mx, my;
    57 
    58     while (scanf("%d %d%*c", &n, &m) != EOF) {
    59         for (i=0; i<n; ++i) {
    60             scanf("%s", map[i]);
    61             for (j=0; j<m; ++j) {
    62                 if (map[i][j] == 'Y') {
    63                     yx = i;
    64                     yy = j;
    65                 } else if (map[i][j] == 'M') {
    66                     mx = i;
    67                     my = j;
    68                 }
    69             }
    70         }
    71         bfs(yx, yy, 0);
    72         bfs(mx, my, 1);
    73         min = INF;
    74         for (i=0; i<n; ++i) {
    75             for (j=0; j<m; ++j) {
    76                 if (step[0][i][j] && step[1][i][j]) {
    77                     tmp = step[0][i][j] + step[1][i][j];
    78                     if (tmp < min)
    79                         min = tmp;
    80                 }
    81             }
    82         }
    83         printf("%d
    ", min*11);
    84     }
    85 
    86     return 0;
    87 }
  • 相关阅读:
    java学习网址大全
    Js 提示框
    api帮助文档及常见IT学习网站
    传参给 jsp
    jsp>action
    二级横菜单显示+sitemesh母板应用
    request,session
    map>json
    清空image画布并改变大小填充背景色
    取汉字首字母方法
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3718996.html
Copyright © 2020-2023  润新知