第21课:综合实战:迷宫最短路
进度 0/24
🗺️
综合实战:迷宫最短路
走进迷宫,BFS带你找到最近的出口!
📖知识引入
🧱迷宫建模
#是墙.是路,每个可走格子就是图上的一个顶点
🔗隐式建图
相邻的可走格子之间默认有边,不必真的把图存下来
📏dist数组
记录起点到每个格子的最少步数,还能顺便判重
🎯方向数组
dx、dy四方向配循环,上下左右移动不用写四遍
💡
BFS判重用dist==-1,入队的那一刻立刻赋值,千万别等出队再标
🔍BFS走迷宫
#include <queue>
#include <cstring>
using namespace std;
char maze[105][105];
int dist[105][105];
int dx[4] = {0, 0, 1, -1}; // 四个方向的横坐标增量
int dy[4] = {1, -1, 0, 0}; // 对应的纵坐标增量
int bfs(int sx, int sy, int ex, int ey) {
memset(dist, -1, sizeof(dist));
queue<pair<int,int>> q;
q.push({sx, sy});
dist[sx][sy] = 0;
while (!q.empty()) {
pair<int,int> cur = q.front(); q.pop();
int x = cur.first, y = cur.second;
if (x == ex && y == ey) return dist[x][y]; // 到达出口
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (maze[nx][ny] == '.' && dist[nx][ny] == -1) {
dist[nx][ny] = dist[x][y] + 1;
q.push({nx, ny});
}
}
}
return -1; // 根本走不到出口
}方向数组+队列+dist,迷宫最短步数一次拿下。
🎯小测验
第1题:迷宫最短步数首选什么算法?
第2题:格子迷宫中的“图”体现在哪?
第3题:dist[nx][ny]==-1在这里的作用是?
📝本课知识点
- ✓格子迷宫=隐式图
- ✓BFS求最短步数
- ✓方向数组配四方向
第21课完成!继续探索下一课吧 🚀
