У меня есть двумерный массив, заполненный объектами. Я хочу преобразовать этот массив в лабиринт, где некоторые объекты являются стенами (у них есть свойство isWall
, которое должно быть помечено как истинное), а некоторые объекты являются проходами (isWall
будет ложным).
Я пытаюсь использовать для этого Рекурсивный откат (я использую стек вместо рекурсии), но мой Лабиринт появляется вот так
Черные квадраты представляют стены, тогда как белые квадраты представляют проходы. Числа внутри белых квадратов не имеют значения (только веса, которые я использую для Джикстра).
Вот моя реализация 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;
}
Я был бы очень признателен за некоторые рекомендации о том, где мой код работает неправильно. Спасибо!