zoukankan      html  css  js  c++  java
  • HDU 1241 Oil Deposits

    很简单很经典的DFS题目

    题意:

    '@'代表一块油田,在以它为中心的九宫格里的'@',也算同在一块油田,问所给矩阵中有多少块油田

    思路:

    遍历地图中的每一个格子,如果遇到'@',则DFS,将这块变为'*',然后八个方向继续DFS

    这样整个搜索完毕以后,这个map就全部变为'*'了

    第一次居然忘了做数组越界检测,结果还AC了,不过以后DFS千万千万要记得这个!

    =_=!! 

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 char map[103][103];
     8 int dir[8][2] = {{0, 1},{0, -1},{1, 0}, {-1, 0},{1, 1}, {1, -1},{-1, 1},{-1, -1}};
     9 int m, n;
    10 
    11 void DFS(int x, int y)
    12 {
    13     map[x][y] = '*';
    14     for(int i = 0; i < 8; ++i)
    15     {
    16         int xx = x + dir[i][0];
    17         int yy = y + dir[i][1];
    18         if( xx>=0 && xx<m && yy>=0 && yy<n
    19              && map[xx][yy] == '@')
    20         {
    21             map[xx][yy] = '*';
    22             DFS(xx, yy);
    23         }
    24     }
    25 }
    26 
    27 int main(void)
    28 {
    29     #ifdef LOCAL
    30         freopen("1241in.txt", "r", stdin);
    31     #endif
    32 
    33     while(scanf("%d%d", &m, &n) == 2)
    34     {
    35         if(m == 0 && n == 0)
    36             break;
    37         for(int i = 0; i < m; ++i)
    38             scanf("%s", map[i]);
    39         int cnt = 0;
    40         for(int i = 0; i < m; ++i)
    41             for(int j = 0; j < n; ++j)
    42             {
    43                 if(map[i][j] == '@')
    44                 {
    45                     ++cnt;
    46                     DFS(i, j);
    47                 }
    48             }
    49 
    50         printf("%d
    ", cnt);
    51     }
    52     return 0;
    53 }
    代码君
  • 相关阅读:
    Maven
    SVN
    SSH 互信
    Linux TCP 连接数
    Linux 查看服务进程运行时间
    Linux cache 缓存过大
    TCP 链接 存在大量 close_wait 等待
    windows 查看链接数
    Linux 创建 时间命名 文件
    bzoj 1059 二分图匹配
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3891398.html
Copyright © 2011-2022 走看看