48分求助
查看原帖
48分求助
318876
金城武楼主2020/7/2 22:03
#include<bits/stdc++.h> 
using namespace std;
int next[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int a[31][31];
int n;
void dfs(int x)
{  if (x>n/2)
{
	return;
}
	for (int i=x;i<=n+1-x;i++)
	{ int book=0;
	  for(int k=0;k<4;k++)
	  {
	  	if (a[i+next[k][0]][x+next[k][1]]==-1)
	  	{
	  		book=1;
	  		break;
		  }
	  }
		if (a[i][x]==0&&book)
		{
			a[i][x]=-1;
		}
	}
	for (int i=x;i<=n+1-x;i++)
	{ int book=0;
	  for(int k=0;k<4;k++)
	  {
	  	if (a[x+next[k][0]][i+next[k][1]]==-1)
	  	{
	  		book=1;
	  		break;
		  }
	  }
		if (a[x][i]==0&&book)
		{
			a[x][i]=-1;
		}
	}
	for (int i=x;i<=n+1-x;i++)
	{ int book=0;
	  for(int k=0;k<4;k++)
	  {
	  	if (a[i+next[k][0]][n+1-x+next[k][1]]==-1)
	  	{
	  		book=1;
	  		break;
		  }
	  }
		if (a[i][n+1-x]==0&&book)
		{
			a[i][n+1-x]=-1;
		}
	}
	for (int i=x;i<=n+1-x;i++)
	{ int book=0;
	  for(int k=0;k<4;k++)
	  {
	  	if (a[n+1-x+next[k][0]][i+next[k][1]]==-1)
	  	{
	  		book=1;
	  		break;
		  }
	  }
		if (a[n+1-x][i]==0&&book)
		{
			a[n+1-x][i]=-1;
		}
	}
	dfs(x+1); 
}
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=0;i<=n+1;i++)
	{
		a[i][0]=-1;
		a[i][n+1]=-1;
	}
	for (int i=0;i<=n+1;i++)
	{
		a[0][i]=-1;
		a[n+1][i]=-1;
	} 
	dfs(1);
	int j;
	for (int i=1;i<=n;i++) 
	{
		for (j=1;j<=n;j++)
		{
			if (a[i][j]==-1)
			{  if (j!=n)
				cout<<0<<" ";
				else
				cout<<0;
			}
			if (a[i][j]==1)
			{ if (j!=n)
				cout<<1<<" ";
				else
				cout<<1;
			}
			if (a[i][j]==0)
			{   if (j!=n)
				cout<<2<<" ";
				else
				cout<<2;
			}
			if (j==n&&i!=n)
			cout<<endl;
		}
	}
}
2020/7/2 22:03
加载中...