走迷宫_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的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 844. 走迷宫(BFS or DP)

为啥bfs走迷宫的路程是最小值而dfs就不一定

[北大机试C]:走迷宫(BFS)

Bailian3752 走迷宫BFS

走迷宫(用队列bfs并输出走的路径)

ACwing(基础)--- 走迷宫(bfs)