计蒜客--T1141--深搜

奶牛 \text{Bessie}Bessie 计划好好享受柔软的春季新草。新草分布在 RR 行 CC 列的牧场里。它想计算一下牧场中的草丛数量。

在牧场地图中,每个草丛要么是单个'#',要么是有公共边的相邻两个'#'。给定牧场地图,计算有多少个草丛。

例如,考虑如下 55 行 66 列的牧场地图

这个牧场有 55 个草丛:一个在第一行,一个在第二列横跨了二、三行,一个在第三行,一个在第四行横跨了四、五列,最后一个在第五行。

输入格式

第一行包含两个整数 RR 和 CC,中间用单个空格隔开。(1 \le R, C \le 100)1≤R,C≤100)

接下来 RR 行,每行 CC 个字符,描述牧场地图。字符只有'#''.'两种。

输出格式

输出一个整数,表示草丛数。

输出时每行末尾的多余空格,不影响答案正确性;

思路:水洼问题简约版,只有四个方向;dfs()完事!!!...

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
char a[100][100];
int n,m;
int ans=0;
int xx[]={0,1,0,-1},yy[]={1,0,-1,0};
void dfs(int x,int y){
	a[x][y]='.';//遍历四个方向
	for(int i=0;i<4;i++){
		int dx=xx[i]+x;
		int dy=yy[i]+y;
		if(dx>=0&&dy>=0&&dx<n&&dy<m&&a[dx][dy]=='#')
			dfs(dx,dy);
	} 
	return;
} 
int main(){
	while(cin>>n>>m){
		for(int i=0;i<n;i++)
			scanf("%s",a[i]);
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				if(a[i][j]=='#'){
					dfs(i,j);
					ans++;
			}
		printf("%d\n",ans);
	}
	return 0;
} 
发布了226 篇原创文章 · 获赞 90 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/queque_heiya/article/details/104840501