JavaScript 迷宫问题:使用栈实现深度优先搜索
// 创建一个栈
let stack = [];
// 迷宫数据结构
let maze = [
[1, 1, 1, 1, 1],
[1, 0, 0, 1, 1],
[1, 0, 0, 0, 1],
[1, 1, 0, 1, 1],
[1, 1, 1, 1, 1]
];
let start_x = 0;
let start_y = 0;
// 找出迷宫的出口
let exit_x = 4;
let exit_y = 4;
// 初始化栈
stack.push({ x: start_x, y: start_y });
// 创建一个记录迷宫路线的数组
let result = [];
// 用栈实现深度优先遍历
while (stack.length > 0) {
let cur_node = stack.pop();
let cur_x = cur_node.x;
let cur_y = cur_node.y;
// 如果当前节点已经走过
if (maze[cur_x][cur_y] === 2) {
continue;
}
// 如果到达出口
if (cur_x === exit_x && cur_y === exit_y) {
result.push(cur_node);
break;
}
// 标记当前节点为已走过
maze[cur_x][cur_y] = 2;
// 将当前节点加入路径中
result.push(cur_node);
// 将当前节点的上下左右点加入栈中
if (cur_y - 1 >= 0 && maze[cur_x][cur_y - 1] !== 1) {
stack.push({ x: cur_x, y: cur_y - 1 });
}
if (cur_y + 1 < maze[0].length && maze[cur_x][cur_y + 1] !== 1) {
stack.push({ x: cur_x, y: cur_y + 1 });
}
if (cur_x - 1 >= 0 && maze[cur_x - 1][cur_y] !== 1) {
stack.push({ x: cur_x - 1, y: cur_y });
}
if (cur_x + 1 < maze.length && maze[cur_x + 1][cur_y] !== 1) {
stack.push({ x: cur_x + 1, y: cur_y });
}
}
// 输出最终的路径
console.log(result);
原文地址: https://www.cveoy.top/t/topic/lgIY 著作权归作者所有。请勿转载和采集!