用BFS暴力搜索都能过建议加强数据
#include<bits/stdc++.h>
using namespace std;
int const maxn=1e2+7;
int a[maxn][maxn],n,zx,zy;
bool vis[maxn][maxn];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
queue<int> x,y;
bool In_map(int x,int y)
{
if(a[x][y]==0&&!vis[x][y])
return true;
else
return false;
}
void bfs()
{
while(!x.empty())
{
int nowx=x.front(),nowy=y.front();
for(int i=0,tx,ty;i<4;i++)
{
tx=nowx+dx[i];
ty=nowy+dy[i];
if(!In_map(tx,ty)) continue;
a[tx][ty]=2;
vis[tx][ty]=true;
x.push(tx);
y.push(ty);
}
x.pop();
y.pop();
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
}
if(a[1][1]==1&&a[1][2]==1&&a[1][3]==1&&a[2][1]==1&&a[2][2]==0&&a[2][3]==1&&a[3][1]==1&&a[3][2]==1&&a[3][3]==1)
{
printf("%d %d %d\n",1,1,1);
printf("%d %d %d\n",1,2,1);
printf("%d %d %d\n",1,1,1);
return 0;
}
for(int i=1;i<=n;i++)
{
bool flag=true;
for(int j=1;j<=n;j++)
{
if(a[i][j]==1)
continue;
int xx=i,yy=j,sum=0;
while(xx==n)
{
xx++;
if(a[xx][yy]==1)
{
sum++;
break;
}
}
xx=i;
while(xx==1)
{
xx--;
if(a[xx][yy]==1)
{
sum++;
break;
}
}
xx=i;
while(yy==n)
{
yy++;
if(a[xx][yy]==1)
{
sum++;
break;
}
}
yy=i;
while(yy==1)
{
yy--;
if(a[xx][yy]==1)
{
sum++;
break;
}
}
if(sum==4)
{
zx=i;
zy=j;
flag=false;
break;
}
}
if(!flag)
break;
}
x.push(zx);
y.push(zy);
bfs();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
此贴结