45分剩下点WA恳求dalao指正!QWQ(帮助必关)
查看原帖
45分剩下点WA恳求dalao指正!QWQ(帮助必关)
601747
xibaohe楼主2023/1/15 23:00
#include<iostream>
using namespace std;
int n,m,p,q,ans;
bool vis[25][25];
char a[25][25];
int dx[8] = {0, 0, 1, -1,1,-1,+1,-1};
int dy[8] = {-1, 1, 0, 0,1,-1,-1,+1};

void dfs(int x,int y)
{
	if(x<1||x>n||y<1||y>m)
	return ;
	if(vis[x][y]==true)
	return ;
	if(a[x][y]!='0')
	return ;
	vis[x][y]=true;
	for(int i = 0; i <= 7; i++)
	{
		int x_new = x + dx[i], y_new = y + dy[i];
		dfs(x_new, y_new);
	}
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			{
				cin>>a[i][j];
			}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='1')
			{
				if(a[i-1][j]=='0') a[i-1][j]='2';
				if(a[i][j-1]=='0') a[i][j-1]='2';
				if(a[i+1][j]=='0') a[i+1][j]='2';
				if(a[i][j+1]=='0') a[i][j+1]='2';
				if(a[i-1][j-1]=='0') a[i-1][j-1]='2';
				if(a[i-1][j+1]=='0') a[i-1][j+1]='2';
				if(a[i+1][j-1]=='0') a[i+1][j-1]='2';
				if(a[i+1][j+1]=='0') a[i+1][j+1]='2';
			}
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='2')
			{
				if(a[i-1][j]=='0') a[i][j]='3';
				if(a[i][j-1]=='0') a[i][j]='3';
				if(a[i+1][j]=='0') a[i][j]='3';
				if(a[i][j+1]=='0') a[i][j]='3';
				if(a[i-1][j-1]=='0') a[i][j]='3';
				if(a[i-1][j+1]=='0') a[i][j]='3';
				if(a[i+1][j-1]=='0') a[i][j]='3';
				if(a[i+1][j+1]=='0') a[i][j]='3';
			}
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='2')
			{
				ans++;
				continue;
			} 
			if(vis[i][j]==false&&a[i][j]=='0')
			{
				ans++;
				dfs(i,j);
			}
		}
	cout<<ans<<endl;
	return 0;
}

2023/1/15 23:00
加载中...