c++dfs10分求改
查看原帖
c++dfs10分求改
759152
yinbe楼主2023/7/8 15:25
#include<iostream>
using namespace std;
char c;
bool flag[250][250]={0},s[250][250]={0};
int m,n,cnt;
void search(int x,int y)
{
	if(flag[x][y])
	{
//		cout<<"1";
		return;
	}
	if(x>m||y>n||x<=0||y<=0)
	{
//		cout<<"2";
		return;
	}
	if(s[x+1][y]||s[x-1][y]||s[x][y+1]||s[x][y-1]||
	s[x+1][y+1]||s[x+1][y-1]||s[x-1][y+1]||s[x-1][y-1]
	||s[x+2][y]||s[x-2][y]||s[x][y+2]||s[x][y-2])
	{
//		cout<<"4";
		flag[x][y]=true;
		search(x+1,y);
		search(x,y+1);
		search(x,y-1);
		search(x-1,y);
		search(x+1,y+1);
		search(x-1,y+1);
		search(x+1,y-1);
		search(x-1,y-1);
		return;
	}
//	cout<<"5";
	cnt++;
	flag[x][y]=true;
	search(x+1,y);
	search(x,y+1);
	search(x,y-1);
	search(x-1,y);
	search(x+1,y+1);
	search(x-1,y+1);
	search(x+1,y-1);
	search(x-1,y-1);
	return;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>c;
			if(c=='#')
			{
				s[i][j]=true;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(s[i][j])
			{
				search(i,j);
	 		}
		}
	}
	printf("%d",cnt);
	return 0;
}
2023/7/8 15:25
加载中...