码迷,mamicode.com
首页 > 其他好文 > 详细

HHUOJ 1114

时间:2018-12-06 22:13:08      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:描述   就会   cst   函数   stream   font   二维数组   深搜   结束   

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 }

 

 

HHUOJ 1114

标签:描述   就会   cst   函数   stream   font   二维数组   深搜   结束   

原文地址:https://www.cnblogs.com/CofJus/p/10079554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!