对一半没明白什么情况没考虑下载机会用完了
查看原帖
对一半没明白什么情况没考虑下载机会用完了
1059776
HSyuio77楼主2023/8/27 19:31
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[31][31];
int n;
void sou0(int i,int j)//把2涂成0 
{
	a[i][j]=0;
	if(i<1||i>n||j<1||j>n)
	{
		return;
	}
	if(a[i+1][j]==2)
	{
		sou0(i+1,j);
	}
	if(a[i-1][j]==2)
	{
		sou0(i-1,j);
	}
	if(a[i][j-1]==2)
	{
		sou0(i,j-1);
		
	}
	if(a[i][j+1]==2)
	{
		sou0(i,j+1);
	}
}
void sou(int i,int j)//0涂成2 
{
	a[i][j]=2;
	if(i<1||i>n||j<1||j>n)
	{
		return;
	}
	if(a[i+1][j]==0)
	{
		sou(i+1,j);
	}
	if(a[i-1][j]==0)
	{
		sou(i-1,j);
	}
	if(a[i][j-1]==0)
	{
		sou(i,j-1);
		
	}
	if(a[i][j+1]==0)
	{
		sou(i,j+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=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(a[i][j]==0)
			{
				sou(i,j);//将所以0涂成2 
			}
		}
	}    
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if((j==1||j==n)&&(i==1||i==n))
			{
				if(a[i][j]==2)
				{
					sou0(i,j);//将边界2涂成0 
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	return 0;	
}
2023/8/27 19:31
加载中...