//广搜
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
int x;
int y;
};
struct node queue[100];//队列实现广搜
int head=0;
int tail=0;
int map[51][51];//存图
int book[51][51];//标记走过的点
int n;//图的规模
int startx,starty;//降落点
int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void bfs(int x,int y,int color)
{
if(head>=tail)
return;
int xnext,ynext;
for(int i=0;i<4;i++){
xnext=x+next[i][0];
ynext=y+next[i][1];
if(xnext>=1&&xnext<=n&&ynext>=1&&ynext<=n&&map[xnext][ynext]!=0&&book[xnext][ynext]==0){
map[xnext][ynext]=-1;
book[xnext][ynext]=1;
queue[tail].x=xnext;
queue[tail].y=ynext;
tail++;
}
}
head++;
bfs(queue[head].x,queue[head].y,color);
return;
}
int main()
{
scanf("%d",&n);
scanf("%d%d",&startx,&starty);
for(int i=0;i<51;i++)
memset(book[i],0,sizeof(book[i]));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
int color=-1;//标记可到达的地方
map[startx][starty]=color;
queue[tail].x=startx;
queue[tail].y=starty;
tail++;
bfs(startx,starty,color);
for(int i=1;i<=n;i++)//输出处理过的图
for(int j=1;j<=n;j++)
printf("%2d%c",map[i][j],j==n?'\n':' ');
return 0;
}
//深搜
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
int x;
int y;
};
int map[51][51];//存图
int book[51][51];//标记走过的点
int n;//图的规模
int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int startx,starty;
void dfs(int x,int y,int color)
{
int xnext,ynext;
for(int i=0;i<4;i++){
xnext=x+next[i][0];
ynext=y+next[i][1];
if(xnext>=1&&xnext<=n&&ynext>=1&&ynext<=n&&map[xnext][ynext]!=0&&book[xnext][ynext]==0){
book[xnext][ynext]=1;
map[xnext][ynext]=color;
dfs(xnext,ynext,color);
//book[xnext][ynext]=0; //深搜不一定有此句,根据需求定
}
}
return;
}
int main()
{
scanf("%d",&n);
scanf("%d%d",&startx,&starty);
for(int i=0;i<51;i++)
memset(book[i],0,sizeof(book[i]));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
int color=-1;//标记可到达的地方
map[startx][starty]=color;
book[startx][starty]=1;
dfs(startx,starty,color);
for(int i=1;i<=n;i++)//输出处理过的图
for(int j=1;j<=n;j++)
printf("%2d%c",map[i][j],j==n?'\n':' ');
return 0;
}