题目描述 Description
贝茜正计划着这一天如何美美地咀嚼春天的绿草,远望着农民约翰钟爱的并被分
割为R (1 <= R <= 100) 行和 C (1 <= C <= 100) 列的草场。她想去数一数草场
有多少个草丛。
每个草丛在地图上用'#'来表示,或者两个'#'连在一起(但不是在一个对角线),
给出草场地图,请告诉贝茜草场上一共有多少个草丛。
例如,下面有一张草场地图 R=5, C=6:
.#....
..#...
..#..#
...##.
.#....
这个草场一共有5个草丛。(1,2);(2,3)+(3+3);(3,6);(4,4)+(4,5);(5,2)
输入描述 Input Description
* 第 1 行: 2个用空格隔开的整数 R , C
* 第 2 至 R+1 行: 草场地图信息
输出描述 Output Description
* 草场上草丛的总个数。
样例输入 Sample Input
5 6
.#....
..#...
..#..#
...##.
.#....
样例输出 Sample Output
5
题目描述 Description
贝茜正计划着这一天如何美美地咀嚼春天的绿草,远望着农民约翰钟爱的并被分
割为R (1 <= R <= 100) 行和 C (1 <= C <= 100) 列的草场。她想去数一数草场
有多少个草丛。
每个草丛在地图上用'#'来表示,或者两个'#'连在一起(但不是在一个对角线),
给出草场地图,请告诉贝茜草场上一共有多少个草丛。
例如,下面有一张草场地图 R=5, C=6:
.#....
..#...
..#..#
...##.
.#....
这个草场一共有5个草丛。(1,2);(2,3)+(3+3);(3,6);(4,4)+(4,5);(5,2)
输入描述 Input Description
* 第 1 行: 2个用空格隔开的整数 R , C
* 第 2 至 R+1 行: 草场地图信息
输出描述 Output Description
* 草场上草丛的总个数。
样例输入 Sample Input
5 6
.#....
..#...
..#..#
...##.
.#....
样例输出 Sample Output
5
解题报告
此题属于简单的搜索题,直接使用DFS即可,判断条件是每个点都去判断是否是#并且没有访问过,把能够连通的全部标记,然后草丛数加一,代码如下:
#include<stdio.h>
#include<string.h>
int map[105][105];
char zan[105][105];
int many,r,c;
int i,j;
void dfs(int x,int y)
{
map[x][y]=1;
if(x+1<r&&zan[x+1][y]=='#'&&map[x+1][y]==0)
dfs(x+1,y);
if(x-1>=0&&zan[x-1][y]=='#'&&map[x-1][y]==0)
dfs(x-1,y);
if(y+1<c&&zan[x][y+1]=='#'&&map[x][y+1]==0)
dfs(x,y+1);
if(y-1>=0&&zan[x][y-1]=='#'&&map[x][y-1]==0)
dfs(x,y-1);
}
int main()
{
many=0;
scanf("%d%d",&r,&c);
memset(map,0,sizeof(map));
memset(zan,0,sizeof(zan));
for(i=0;i<r;i++)
scanf("%s",zan[i]);
for(i=0;i<r;i++)
for(j=0;j<c;j++)
if(!map[i][j]&&zan[i][j]=='#')
{
dfs(i,j);
many++;
}
printf("%d\n",many);
return 0;
}