window.cnblogsConfig = {//可以放多张照片,应该是在每一个博文上面的图片,如果是多张的话,那么就随机换的。 homeTopImg: [ "https://i.loli.net/2019/08/02/5d440029af8e994539.png" ], }

The Wall (easy)

The Wall (easy)

一道十分明显的 dfs。

可以用一个数组储存此处是是否可以连通,然后进行标记,每一个点都看一次,时间复杂度 \(\mathcal{O(nm)}\)

废话不多说,直接上代码:


#include <bits/stdc++.h>
using namespace std;
int n,m,s;
bool b[1005][1005];
void f(int x,int y)		//搜索连通块
{
	if(b[x][y+1]&&y<m)
	{
		b[x][y+1]=0;
		f(x,y+1);
	}
	if(b[x+1][y]&&x<n)
	{
		b[x+1][y]=0;
		f(x+1,y);
	}
	if(b[x][y-1]&&y>1)
	{
		b[x][y-1]=0;
		f(x,y-1);
	}
	if(b[x-1][y]&&x>1)
	{
		b[x-1][y]=0;
		f(x-1,y);
	}
}
char ch[1005];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%s",ch);
		for(int j=0;j<m;j++)
			b[i][j+1]=(ch[j]=='.'?0:1);	//判断是否为实
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(b[i][j])	//若没有被搜索过且此处为实,进行搜索
			{
				s++;
				f(i,j);
			}
	printf("%d",s);
	return 0;
}

posted @ 2024-01-21 21:52  mgcjade  阅读(39)  评论(0)    收藏  举报