走迷宫_BFS
Posted 一只特立独行的猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走迷宫_BFS相关的知识,希望对你有一定的参考价值。
BFS的练手题,我顺便打印了路径。
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e3 + 3;
queue<pair<int, int > > q;
//arr存放迷宫,p存放起点出发到x,y的路径长度
int arr[N][N],p[N][N];
int n,m;
//path[N][N]存放上一个结点
pair<int, int > t, path[N][N];
void BFS() {
int xdir[] = { 0,1,0,-1 };
int ydir[] = { 1,0,-1,0 };
t.first = 1;
t.second = 1;
path[1][1] = t;
q.push(t);
pair<int, int> k;
while (!q.empty()) {
k = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int x = k.first + xdir[i];
int y = k.second + ydir[i];
if (x > 0 && y > 0 && x <= n && y <= m && arr[x][y]==0&&p[x][y]==0) {
p[x][y] = p[k.first][k.second] + 1;
path[x][y] = k;
q.push({ x,y });
}
}
}
t = { n,m };
cout << p[n][m] << endl;
//for (int i = 1; i <= p[n][m]; i++) {
// cout << t.first << " " << t.second << endl;
// t = path[t.first][t.second];
//}
}
int main() {
cin >> n>>m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> arr[i][j];
}
}
p[1][1] = 1;
BFS();
return 0;
}
以上是关于走迷宫_BFS的主要内容,如果未能解决你的问题,请参考以下文章