• HHUOJ 1114


    1114: 屁屁上的巴掌

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 71  解决: 38
    [提交][状态][讨论版][命题人:外部导入]

    题目描述

     

    小新是个调皮的孩子,他总是会把衣服搞脏,他的妈妈美伢非常的生气,于是在《和妈妈的约定条款》加上了第三百七十七条:小新衣服上每有一块污渍妈妈就会打小新的小屁屁一下作为惩罚。我们规定如果两个污渍相邻(直接相邻的上下左右、左上、左下,右上、右下都算相邻)那么它们就算是一块污渍。现在小新又把衣服搞脏了,请你帮他算一算他的屁股上会挨几巴掌?

    输入

     

    输入将会包含多组测试数据,每组测试数据将会以m和n开头,表示将会用m行n列的网格代表小新的衣服,如果m=0输入结束;1 <= m <= 100 并且1 <= n <= 100.接下来是m行n列的网格,网格中’@’代表污渍,’*’代表没有污渍。

    输出

     

    对于每组数据,请输出小新屁股挨到的巴掌的数量。

    样例输入

    1 1
    *
    3 5
    *@*@*
    **@**
    *@*@*
    1 8
    @@****@*
    5 5
    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@
    0 0
    

    样例输出

    0
    1
    2
    2

    DFS,一开始想,写个函数判断周围有没有其他污点就行了,写着写着发现要用递归,然后才知道要用深搜(迟钝。。想通之后就简单了

    另外,初始化时,scanf貌似不能直接读入二维数组,会把回车读进去,用cin就行了,要是以后卡了输入怎么办就不知道了,挖坑待填。。

    校赛倒计时,加油!

    以下是AC代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <cstring>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 const int maxn = 105;
     9 char board[maxn][maxn];
    10 int dx[] = { -1,-1,-1,0,1,1,1,0 };
    11 int dy[] = { -1,0,1,1,1,0,-1,-1 };
    12 int n, m;
    13 void dfs(int x, int y)
    14 {
    15     for (int i = 0; i < 8; i++)
    16     {
    17         int tempx = x + dx[i];
    18         int tempy = y + dy[i];
    19         if (board[tempx][tempy] == '@')
    20         {
    21             board[tempx][tempy] = '*';
    22             dfs(tempx, tempy);
    23         }
    24     }
    25 }
    26 int main(void)
    27 {
    28     int n, m;
    29     while (scanf_s("%d%d", &m, &n) != EOF && m != 0)
    30     {
    31         memset(board, '*', sizeof(board));
    32         int i, j;
    33         int count;
    34         for (i = 1; i <= m; ++i)
    35         {
    36             for (j = 1; j <= n; ++j)
    37             {
    38                 cin >> board[i][j];
    39             }
    40         }
    41         for (i = 0; i <= m + 1; ++i)
    42         {
    43             board[i][0] = '#';
    44             board[i][n + 1] = '#';
    45         }
    46         for (j = 0; j <= n + 1; ++j)
    47         {
    48             board[0][j] = '#';
    49             board[m + 1][j] = '#';
    50         }
    51         count = 0;
    52         for (i = 1; i <= m; ++i)
    53         {
    54             for (j = 1; j <= n; ++j)
    55             {
    56                 if (board[i][j] == '@')
    57                 {
    58                     dfs(i, j);
    59                     count++;
    60                 }
    61             }
    62         }
    63         cout << count << endl;
    64     }
    65     return 0;
    66 }
    
    
    
     
  • 相关阅读:
    ionic app打包和签名
    js时间戳与日期格式的相互转换
    js获取选中日期的当周的周一和周日
    Error occurred during initialization of VM Could not reserve enough space for 2097152KB object heap
    CSS媒体查询 @media
    [ng:areq] Argument 'XXXXCtrl' is not a function, got undefined
    plsql如何导出查询结果
    angularjs的$http请求方式
    JQuery请求数据的方式
    后台返回xml格式转json
  • 原文地址:https://www.cnblogs.com/CofJus/p/10079554.html
Copyright © 2020-2023  润新知