#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int migong[10][10];//1表示空地,2表示障碍物
int value[10][10];//0表示没有被访问,1表示已经访问过了
int n,m,t;
int sx,sy;
int fx,fy;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int cnt=0;
int minn=0x3f3f3f3f;
struct point{
int x;
int y;
int step;
};
queue <point> r;//申请队列
/*
5 4
1 1 2 1
1 1 1 1
1 1 2 1
1 2 1 1
1 1 1 2
1 1 4 3
*/
int main()
{
//输入
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>migong[i][j];
}
}
cin>>sx>>sy>>fx>>fy;
//BFS
point start;//定义起点
start.x=sx;
start.y=sy;
start.step=0;
r.push(start);//将起点入队
value[sx][sy]=1;
int flag=0;
while(!r.empty())
{
int x=r.front().x;
int y=r.front().y;
if(x==fx&&y==fy)
{
flag=1;
cout<<r.front().step;
break;
}
for(int k=0;k<=3;k++)
{
int tx=x+dx[k];
int ty=y+dy[k];
if(migong[tx][ty]==1&&value[tx][ty]==0)
{
point temp;
temp.x=tx;
temp.y=ty;
temp.step=r.front().step+1;
r.push(temp);
value[tx][ty]=1;
}
}
r.pop();//拓展完了需要将队首元素出队
}
if(flag==0)
cout<<"没有答案"<<endl;
return 0;
}
bfs-迷宫问题
最新推荐文章于 2022-05-18 17:07:40 发布