DFS入门题

1378: Best Grass

Time Limit:1000MS  Memory Limit:65536K
Total Submit:47 Accepted:25

[Submit]   [Status]   [Discuss]

 

Font Size: Aa Aa Aa

Description

Bessie is planning her day of munching tender spring grass and is gazing

out upon the pasture which Farmer John has so lovingly partitioned into a
grid with R (1 <= R <= 100) rows and C (1 <= C <= 100) columns. She wishes
to count the number of grass clumps in the pasture.

Each grass clump is shown on a map as either a single '#' symbol or perhaps
two '#' symbols side-by-side (but not on a diagonal). Given a map of the
pasture, tell Bessie how many grass clumps there are.

By way of example, consider this pasture map where R=5 and C=6:

.#....
..#...
..#..#
...##.
.#....

This pasture has a total of 5 clumps: one on the first row, one that spans
the second and third row in column 2, one by itself on the third row, one
that spans columns 4 and 5 in row 4, and one more in row 5.

Input

* Line 1: Two space-separated integers: R and C


* Lines 2..R+1: Line i+1 describes row i of the field with C
characters, each of which is a '#' or a '.'

Output

* Line 1: A single integer that is the number of grass clumps Bessie

can munch

Sample Input

5 6

.#....
..#...
..#..#
...##.
.#....

Sample Output

5

Source

 

 

 

没啥多说的,就是典型的DFS

#include<cstdio>
#include<cstring>
using namespace
std;

char
map[105][105];

int
j[2][4] = {0, 0, -1, 1, 1, -1, 0, 0};

int
dfs(int x, int y)
{

if
(map[x][y] == '#')
{

map[x][y] = '.';
for
(int i = 0; i < 4; i++)
{

int
xi = x + j[0][i], yj = y + j[1][i];
if
(map[xi][yj] != 0)
dfs(xi, yj);
}
}

return
0;
}


int
main()
{

int
r, c;
memset(map, 0, sizeof(map));
scanf("%d %d", &r, &c);
int
count = 0;
for
(int i = 0; i < r; i++)
scanf("%s", map[i]);
for
(int i = 0; i < r; i++)
for
(int j = 0; j < c; j++)
if
(map[i][j] == '#')
{

dfs(i, j);
count++;
}

printf("%d/n", count);
return
0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值