这道题想上去就很简单~
思路:将城墙外的0全部涂成3,然后输出的时候如果是0就输出2,如果是3就输出0,如果是1就原样输出,下面是AC代码
#include <iostream>
#include <cstring>
using namespace std;
#define Max 666
void dfs(int x,int y);
int matrix[Max][Max];
int pos[5][3]={{0,0,0},{0,-1,0},{0,0,1},{0,1,0},{0,0,-1}};
int N;
int main()
{
cin>>N;
memset(matrix,0, sizeof(matrix));
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
cin>>matrix[i][j];
}
}
dfs(0,0);
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(matrix[i][j]==3)
{
cout<<0<<" ";
}
else if(matrix[i][j]==0)
{
cout<<2<<" ";
}
else
{
cout<<1<<" ";
}
}
cout<<endl;
}
return 0;
}
void dfs(int x,int y)
{
matrix[x][y]=3;
for(int i=1;i<=4;i++)
{
int nx=x+pos[i][1];
int ny=y+pos[i][2];
if(matrix[nx][ny]==0&&nx>=0&&nx<=N+1&&ny>=0&&ny<=N+1)
{
dfs(nx,ny);
}
}
}