// 创建一个栈
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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录