zoukankan      html  css  js  c++  java
  • 【HDOJ】3316 Mine sweeping

    简单BFS。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <queue>
     6 using namespace std;
     7 
     8 #define MAXN 105
     9 
    10 typedef struct node_t {
    11     int x, y;
    12     node_t() {}
    13     node_t(int xx, int yy) {
    14         x = xx; y = yy;
    15     }
    16 } node_t;
    17 
    18 char map[MAXN][MAXN];
    19 char ans[MAXN][MAXN];
    20 bool visit[MAXN][MAXN];
    21 int dir[8][2] = {
    22     {-1,0},{1,0},{0,1},{0,-1},
    23     {1,1},{1,-1},{-1,1},{-1,-1}
    24 };
    25 node_t s;
    26 int n;
    27 
    28 bool check(int x, int y) {
    29     return x<0 || x>=n || y<0 || y>=n;
    30 }
    31 
    32 void bfs() {
    33     int i, j, k, tmp;
    34     int x, y, v;
    35     int xx[8], yy[8], m;
    36     queue<node_t> Q;
    37     node_t nd;
    38     
    39     memset(visit, false, sizeof(visit));
    40     memset(ans, '.', sizeof(ans));
    41     visit[s.x][s.y] = true;
    42     for (i=0; i<n; ++i)
    43         ans[i][n] = '';
    44     Q.push(s);
    45     
    46     while (!Q.empty()) {
    47         nd = Q.front();
    48         Q.pop();
    49         v = m = 0;
    50         for (i=0; i<8; ++i) {
    51             x = nd.x + dir[i][0];
    52             y = nd.y + dir[i][1];
    53             if (check(x, y))
    54                 continue;
    55             xx[m] = x;
    56             yy[m] = y;
    57             ++m;
    58             if (map[x][y] == 'X')
    59                 ++v;
    60         }
    61         ans[nd.x][nd.y] = v+'0';
    62         if (v == 0) {
    63             for (i=0; i<m; ++i) {
    64                 if (!visit[xx[i]][yy[i]]) {
    65                     visit[xx[i]][yy[i]] = true;
    66                     Q.push(node_t(xx[i], yy[i]));
    67                 }
    68             }
    69         }
    70     }
    71 }
    72 
    73 int main() {
    74     int i, j;
    75 
    76 #ifndef ONLINE_JUDGE
    77     freopen("data.in", "r", stdin);
    78 #endif    
    79     
    80     while (scanf("%d", &n) != EOF) {
    81         for (i=0; i<n; ++i)
    82             scanf("%s", map[i]);
    83         scanf("%d %d", &s.x, &s.y);
    84         
    85         if (map[s.x][s.y] == 'X') {
    86             printf("it is a beiju!
    
    ");
    87         } else {
    88             bfs();
    89             for (i=0; i<n; ++i)
    90                 printf("%s
    ", ans[i]);
    91             printf("
    ");
    92         }
    93     }
    94     
    95     return 0;
    96 }
  • 相关阅读:
    VBA_headers_mapping
    pandas_知识总结_基础
    python_super()及继承顺序
    python_端口扫描
    python_socket登陆验证_明文
    python_sys.argv的使用
    python_os_shutil_获取文件夹下所有文件的大小
    python_面向对象_组合
    魔术球问题 【网络流24题】【建图技巧】
    牛客&科大讯飞杯&SHU、L动物森友会【二分】【网络流】
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4176954.html
Copyright © 2011-2022 走看看