Key:记录一下Bfs的层数(即搜了多少层)
Idea:在结构体中加x,y,step(层数)
代码实现:
//求最短路径 Key;记录bfs层数
//2016/7/17
#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=2010;
struct Point{
int x;
int y;
int step;
}que[5000002];
int dx[4]={-1,0,0,1};
int dy[4]={0,-1,1,0};
int map[MAX][MAX],n,m;
void bfs(int x,int y,int x1,int y1)
{
int f=1,l=1,step=0,xx,yy,length;
que[l].x=x;
que[l].y=y;
que[l++].step=0;
map[x][y]=1;
while(f<l)
{
x=que[f].x;
y=que[f].y;
step=que[f].step;//!!!!!!
if(x==x1&&y==y1){
printf("%d\n",step);return;
}
for(int i=0;i<4;i++)
{
xx=x+dx[i];
yy=y+dy[i];
length=step;//length为中间变量
if(xx>=1&&xx<=n&&yy>=1&&yy<=m){
if(map[xx][yy]==0){
map[xx][yy]=1;
length++;
que[l].x=xx;
que[l].y=yy;
que[l++].step=length;
}
}
}
f++;
}
printf("No Answer!\n");return;
}
int main()
{
int x,y,x1,y1;
while(~scanf("%d %d",&n,&m))
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&map[i][j]);
scanf("%d %d",&x,&y);
scanf("%d %d",&x1,&y1);
bfs(x,y,x1,y1);
}
return 0;
}