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);
这是“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";
};