差一个测试点过,超时了
查看原帖
差一个测试点过,超时了
938874
zhangyiming3721楼主2024/9/2 22:00
#include<bits/stdc++.h>
using namespace std;
int n;
int a[35][35];
int dx[]={0,0,0,1,-1};
int dy[]={0,1,-1,0,0};
bool vis[35][35];

void dfs2(int x,int y)
{
	for(int i=1;i<=4;i++)
	{
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx<1||nx>n||ny<1||ny>n||a[nx][ny]==0||a[nx][ny]==1) continue;
		a[nx][ny]=0;
		dfs2(nx,ny);
	}
}

void dfs(int x,int y)
{
	if(x==n||x==1||y==n||y==1)
	{
		if(a[x][y]==2)
		{
			dfs2(x,y);
		}
		return;
	}
	else
	{
		for(int i=1;i<=4;i++)
		{
			int nx=x+dx[i];
			int ny=y+dy[i];
			if(nx<1||nx>n||ny<1||ny>n||vis[nx][ny]==1||a[nx][ny]==1) continue;
			vis[nx][ny]=1;
			dfs(nx,ny);
			vis[nx][ny]=0;
		}
	}
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
			if(a[i][j]==0) a[i][j]=2;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==2)
			{
				dfs(i,j);
			}
		}
	}
//	cout<<endl;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

2024/9/2 22:00
加载中...