bfs 迷宫问题

#include<iostream>
#include<queue>
using namespace std;
int INF=100000000;
int n, m;
int sx, sy;//起点终点坐标
int ex, ey;
char maze[100][100];
int d[100][100];
int dx[4] = { -1,0,1,0 }, dy[4] = { -1,0,1,0 };
typedef pair<int,int> P;
int bfs() {
	queue<P> que;
	que.push(P(sx, sy));
	d[sx][sy] = 0;
	while (que.size() != 0) {
		P p = que.front();
		que.pop();
		if (p.first == ex && p.second == ey)
			break;
		for (int i = 0; i < 4; i++) {
			int x = p.first + dx[i], y = p.second + dy[i];
			if (0 <= x && x < n && 0 <= y && y < m&&d[x][y] == INF&&maze[x][y]!='#') {
				que.push(P(x, y));
				d[x][y] = d[p.first][p.second] + 1;
			}
		}
	}
	return d[ex][ey];
}
int main() {
	cin >> n >> m;
	cin >> sx >> sy >> ex >> ey;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cin >> maze[i][j];
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			d[i][j] = INF;
	int res = bfs();
	cout << res;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/albert48/article/details/83450265