初学广搜后试手之作
#include<bits/stdc++.h>
using namespace std;
int n,m;
int sx,sy,ex,ey;//始末位置
int chess[105][105];//迷宫 1 可通行 2不可通行
int vis[105][105];//记录点
int xx[]={1,0,-1,0};//方向数组
int yy[]={0,1,0,-1};
struct point
{
int x;
int y;
int step;
};
queue<point>r;//定义结构体型队列
struct point now,temp;
bool flag;//标记可否走出迷宫
void bfs(int x,int y)
{
while(!r.empty())//队列不空 继续循环
{
now=r.front();//取队头
r.pop();//队头出列
if(now.x==ex&&now.y==ey)//走到终点 程序结束
{
flag=true;
break;
}
for(int i=0;i<4;i++)
{
int dx=now.x+xx[i];
int dy=now.y+yy[i];
if(!vis[dx][dy]&&chess[dx][dy]==1)//如果可以拓展 入队,否则跳过
{
temp.x=dx;
temp.y=dy;
temp.step=now.step+1;
r.push(temp);
vis[dx][dy]=1;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>chess[i][j];
cin>>sx>>sy>>ex>>ey;
struct point atemp;
atemp.x=sx;
atemp.y=sy;
atemp.step=0;
vis[sx][sy]=1;
r.push(atemp);
bfs(sx,sy);
if(!flag)
{
cout<<"No Answer\n";
}
else
{
cout<<now.step<<endl;//输出最终步数
}
return 0;
}