#include<iostream>
#include<list>
using namespace std;
class coordinate
{
public:
int x,y,step;
coordinate(int xx,int yy,int s):x(xx),y(yy),step(s){}
};
int main()
{
list<coordinate>l;
int map[50][50]={0},visited[50][50]={0};
int row,col,start_x,start_y,flag=0,direction,target_x,target_y,i,j,next_x,next_y;
cin>>row>>col;
for(i=0;i<row;i++)
for(j=0;j<col;j++)
cin>>map[i][j];
cin>>start_x>>start_y>>target_x>>target_y;
l.push_back(coordinate(start_x,start_y,0));//initialize
visited[start_x][start_y]=1;
while(!l.empty())
{
for(direction=0;direction<=3;direction++)//0:upward 1:leftward 2:downward 3:rightward
{
next_x=l.front().x;
next_y=l.front().y;
switch(direction)
{
case 0:next_y=l.front().y-1;break;
case 1:next_x=l.front().x-1;break;
case 2:next_y=l.front().y+1;break;
case 3:next_x=l.front().x+1;break;
}
if(next_x<0||next_y<0||next_x>=row||next_y>=col)//boundary condition
continue;
else if(map[next_x][next_y]==0&&visited[next_x][next_y]==0)
{
visited[next_x][next_y]=1;
l.push_back(coordinate(next_x,next_y,l.front().step+1));
}
if(next_x==target_x&&next_y==target_y)//break condition
{
flag=1;
break;
}
}
if(flag==1)
break;
l.pop_front();
}
cout<<l.back().step<<endl;
return 0;
}BFS(Breadth First Search)
最新推荐文章于 2025-03-03 17:42:40 发布
本文介绍了一种使用C++实现的迷宫寻路算法,通过遍历迷宫地图并利用列表来存储坐标及步数,实现了从起点到终点的路径寻找。该算法基于广度优先搜索原理,适用于简单的迷宫环境。

14万+

被折叠的 条评论
为什么被折叠?



