У меня есть двумерный массив, заполненный объектами. Я хочу преобразовать этот массив в лабиринт, где некоторые объекты являются стенами (у них есть свойство isWall
, которое должно быть помечено как истинное), а некоторые объекты являются проходами (isWall
будет ложным).
Я пытаюсь использовать для этого Рекурсивный откат (я использую стек вместо рекурсии), но мой Лабиринт появляется вот так ![Picture of incorrect Maze](https://i.stack.imgur.com/LEyte.png)
Черные квадраты представляют стены, тогда как белые квадраты представляют проходы. Числа внутри белых квадратов не имеют значения (только веса, которые я использую для Джикстра).
Вот моя реализация Recursive Backtracking в JavaScript.
JavaScript
function isValid(r, c, grid) {
if (r < 0 || c < 0) {
return false;
}
if (r < grid.length && c < grid[r].length) {
return true;
}
return false;
}
export default function recursiveBacktracker(grid, startNode, endNode) {
// Fill Grid with walls
for (let r = 0; r < grid.length; r++) {
for (let c = 0; c < grid[r].length; c++) {
grid[r][c].isWall = true;
}
}
let visited = new Set();
let stack = [startNode];
let neighbors = [
[2, 0],
[-2, 0],
[0, 2],
[0, -2]
];
while (stack.length > 0) {
let cur = stack.pop();
let r = cur[0],
c = cur[1];
console.log(r, c);
visited.add(r + "." + c);
grid[r][c].isWall = false;
for (let n of neighbors) {
let rr = r + n[0];
let cc = c + n[1];
if (isValid(rr, cc, grid) && !visited.has(rr + "." + cc)) {
grid[r + n[0] / 2][c + n[0] / 2].isWall = false;
stack.push([rr, cc]);
break;
}
}
}
return grid;
}
Я был бы очень признателен за некоторые рекомендации о том, где мой код работает неправильно. Спасибо!