#include <bits/stdc++.h>
using namespace std; 
int n,m,ans; 
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
char mp[101][101]; bool vis[101][101]; 
void dfs(int x,int y){
	for(int i=0;i<4;i++){ 
		int xx=x+dx[i],yy=y+dy[i]; 
		if(xx>0&&xx<=n&&yy>0&&yy<=m&&!vis[xx][yy]&&mp[xx][yy]=='#'){ 
			vis[xx][yy]=true; 
			dfs(xx,yy); 
			} 
		} 
	} 
int main(){ 
	cin>>n>>m; 
	for(int i=1;i<=n;i++){ 
		for(int j=1;j<=m;j++){ 
			cin>>mp[i][j]; } 
			} 
			for(int i=1;i<=n;i++){ 
				for(int j=1;j<=m;j++){ 
					if(mp[i][j]=='#'&&vis[i][j]==false){ 
						ans++; dfs(i,j); 
					} 
				} 
			} 
			cout<<ans; return 0;
}

把所有的山变成陆地:发现一块山,先使其变成陆地,再深搜,直至这座山被变成陆地,再让ans+1,直至每个点都变成陆地

0 条评论

目前还没有评论...