84分第4点WA求调!
查看原帖
84分第4点WA求调!
1364351
rainy_morning楼主2025/2/6 15:25

dfs,最后输出时会随机多冒出一个2,调整了输出以后第四点还是WA了

#include<bits/stdc++.h>
using namespace std;
const int N=3e4+5;
int n,sum,ans;
char a[N][N];
bool vis[N][N];
bool flag;
int dirx[4]={0,0,1,-1};
int diry[4]={-1,1,0,0};

void dfs(int x,int y)
{
	for(int i=0;i<4;i++)
	{
		int xx=x+dirx[i];
		int yy=y+diry[i];
		if((xx==1||xx==n||yy==1||yy==n)&&a[xx][yy]=='0') flag=true;
		if(a[xx][yy]=='1'||xx==1||xx==n||yy==1||yy==n||vis[xx][yy])  continue;
		a[xx][yy]='2';
		sum++;
		vis[xx][yy]=true;
		dfs(xx,yy);
	}
}

int main()
{
	cin>>n; 
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>a[i][j];
	for(int i=2;i<n;i++)     
	{
		for(int j=2;j<n;j++)
		{
			if(a[i][j]=='0'&&!vis[i][j])  
			{
				vis[i][j]=true; 
				flag=false;      
				sum=1;           
				dfs(i,j);        
				if(flag!=true) a[i][j]='2';
				ans+=sum;	
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]=='2') 
			{
				for(int s=0;s<4;s++)
				{
					int xx=i+dirx[s];
					int yy=j+diry[s];
					if(a[xx][yy]=='0') 
					{
						a[i][j]='0';continue;
					}
				}
			}
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
}
2025/2/6 15:25
加载中...