1378: Best Grass
Time Limit:1000MS Memory Limit:65536K
Total Submit:47 Accepted:25
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;
}