#include <iostream>
using namespace std;
#include <queue>
int n,m;
const int N = 101;
int g[N][N];
int d[N][N];
pair<int,int> Prev[N][N];//存储每个点的前驱节点,用于追踪路径
queue<pair<int,int>> q;//装点坐标的队列,用于对点进行出队入队
int dx[4] ={-1,0,1,0};
int dy[4] ={0,1,0,-1};
void bfs(int x,int y)
{
q.push({x,y});//进队
g[x][y] = 1;//该点已经走过
d[x][y] = 0;//步数为0
while(!q.empty())
{
pair<int,int> start = q.front();//出队,获取坐标
q.pop();//出队
for(int i =0 ;i<4;i++)//四路走
{
int x = start.first + dx[i];
int y = start.second + dy[i];
if(x>=0 && x<n &&y>=0 && y<m && g[x][y]==0 )
{
g[x][y] = 1;//该点可以走
Prev[x][y] = start;//存入该坐标上一个结点的坐标
q.push({x,y});//入队
d[x][y] = d[start.first][start.second]+1;//上一个结点的步数+1
}
}
}
x = n-1;
y = m-1;
while(x || y)//找路径
{
cout << x << ' ' << y;
cout << endl;
x = Prev[x][y].first;
y = Prev[x][y].second;
}
}
int main()
{
cin >> n>> m;
for(int i = 0;i<n;i++)
{
for(int j =0 ;j<m;j++)
{
cin >> g[i][j];
}
}
bfs(0,0);
cout << d[n-1][m-1];
return 0;
}
【C++】走迷宫
最新推荐文章于 2024-09-27 12:26:39 发布