找到走出迷宫的出路

问题描述 投票:0回答:1

II需要写一个算法来寻找走出迷宫的出路,就是二维数组。我玩了代码,但它不能完全理解当没有更多的优点离开迷宫时,我应该如何在代码中标记终点线?

0
- 起始位置
+
- 方式
#
- 墙。

我走在正确的道路上吗?递归函数是应对这一挑战的好方法吗?

var maze = [
  ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#'],
  ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#'],
  ['#', '#', '+', '+', '#', '#', '#', '#', '#', '#'],
  ['#', '#', '+', '#', '0', '#', '+', '+', '+', '+'],
  ['#', '#', '+', '+', '+', '+', '+', '#', '#', '#'],
  ['#', '#', '#', '#', '#', '+', '+', '#', '#', '#'],
  ['#', '#', '#', '#', '#', '#', '+', '#', '#', '#'],
  ['#', '#', '#', '#', '#', '#', '+', '#', '#', '#'],
  ['#', '#', '#', '#', '#', '#', '+', '+', '#', '#'],
  ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
];

我玩了代码但仍然无法完全理解?我走对了吗?递归函数可以解决这个挑战吗?我非常感谢所有可以帮助我的人。

我的“不完美的代码”:)

function goFurther(row, column) {

  console.log(maze[row][column]);
  if (maze[row][column] == ' ') {
    console.log('We solved the maze');
  } else if (maze[row][column] == '+') {
    console.log('you need make it go further');
    maze[row][column] = 909;
    if (row < maze.length - 1) {
      goFurther(row + 1, column);
    }
    if (column < maze[row].length - 1) {
      goFurther(row, column + 1);
    }

    if (row > 0) {
      goFurther(column + 1, row);
      console.log(row, column);
    }
    if (column > 0) {
      goFurther(row + 1, column);
      console.log(row, column);
    }
  }
}

goFurther(2, 2);
javascript
1个回答
0
投票

这是“0”和“1”的示例,但您可以根据需要进行修改

function minPathToExit(grid) {
    // In case we cant move from the start position
    if (grid[0][0] === 1 || (grid[0][1] === 1 && grid[1][0] === 1)) return "Cannot move";

    const rows = grid.length;
    const cols = grid[0].length;

    const visited = new Set();
    const directions = [
        [0, 1],
        [1, 0],
        [-1, 0],
        [0, -1]
    ]
    const queue = [
        [0, 0, 0]
    ];

    while (queue.length > 0) {
        const [x, y, steps] = queue.shift();

        // Base condition for finish
        if (x === rows - 1 && y === cols - 1) {
            return `You reached the end of the grid with ${steps} steps completed.`;
        }

        // Check directions
        for (const [dx, dy] of directions) {
            const nx = dx + x;
            const ny = dy + y;

            const visitedKey = `${nx},${ny}`;

            if (nx >= 0 && ny >= 0 && nx < rows && ny < cols && grid[nx][ny] === 0 && !visited.has(visitedKey)) {
                visited.add(visitedKey);
                queue.push([nx, ny, steps + 1]);
            }
        }

    }

    return "There is no way to exit";

};
© www.soinside.com 2019 - 2024. All rights reserved.