记录开始点和结束点的位置开始点设为1,不能走回来结束点不能设为1,不然走不到搜索一遍就没了*/
#include<cstdio>#include<cstring>int fx[4]={1,0,-1,0};int fy[4]={0,1,0,-1};char ma[1001][1001];//注意注意!!一点要用char,输入图的时候没有空格,int输入不了 struct node{int x,y,c;}q[1100000];//(x,y)坐标,c是步数 int n; void bfss(int stx,int sty,int enx,int eny)//(stx,sty)起点位置,(enx,eny)终点位置 { int tou=1,wei=2; q[tou].x=stx;q[tou].y=sty;//第一步在起点开始 q[tou].c=0;//走到起点需要0步 while(tou!=wei) { for(int i=0;i<4;i++)//四个方向可以走 { int xx=q[tou].x+fx[i];//xx等于当前步q[tou].x,fx[i]是偏移量 int yy=q[tou].y+fy[i];//yy同理 if(xx==enx&&yy==eny){printf("%d",q[tou].c+1);return;}//如果走到重点,输出当前步数加1(因为走到终点也算一步),然后结束 if(xx<1||xx>n||yy<1||yy>n||ma[xx][yy]=='1') continue;//如果出界或者不能走,跳过 ma[xx][yy]='1';//走过了封路 q[wei].x=xx;//走下一步 q[wei].y=yy;//走下一步 q[wei].c=q[tou].c+1;//步数加一 wei++;//前进 } tou++;//前进 }}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",ma[i]+1);//只能这样输入,用%c会有BUG,会没有输出 } int sx,sy,ex,ey;scanf("%d %d %d %d",&sx,&sy,&ex,&ey);//输入起点终点坐标 ma[sx][sy]=1;//起点为1 bfss(sx,sy,ex,ey);//搜索 return 0;}