如何在二维数组中查找路径



我正在尝试创建一个2d阵列

其中变量a为true,否则为false。

我知道我必须使用递归,但我不确定如何进行

var a = [[
[0,0,0,0,0],
[1,1,1,1,0],
[0,0,0,0,0],
[0,1,1,1,1],
[0,0,0,0,0]
]]
function MazeSolver(maze) {
this.maze = maze;
this.traverse = function(column, row) {
console.log(1, this.maze[0][column][row] )
if(this.maze[0][column][row] == 2) {
console.log('1dwffdf',this.maze[0][column][row]);
} else if(this.maze[0][column][row] == 1) {
console.log("At valid position (" + column + ", " + row + ")");
this.maze[0][column][row] = 9;
if(column < this.maze[0].length - 1) {
this.traverse(column + 1, row);
}
if(row < this.maze[0][column].length - 1) {
this.traverse(column, row + 1);
}
if(column > 0) {
this.traverse(column - 1, row);
}
if(row > 0) {
this.traverse(column, row - 1);
}
}
};
};

有什么想法吗?

此代码将遍历迷宫,并将值缩减为包含正确路径的每个colrow的对象数组。

注意Array.prototype.flat仍然是实验性的,因此下面的可能不兼容。

let path = maze.reduce((acc, _,row)=> {
let validpath = _.reduce((acc,__,col)=> ((__)&&acc.push({col,row}), acc),[] );
if(validpath.length > 0) acc.push(validpath);
return acc;
}, []).flat(0);

注意此版本使用Array.prototype.concat,它可以与排列运算符组合使用,作为Array.prototype.flat:的polyfill

let path = [].concat(...maze.reduce((acc, _,row)=> {
let validpath = _.reduce((acc,__,col)=> ((__)&&acc.push({col,row}), acc),[] );
if(validpath.length > 0) acc.push(validpath);
return acc;
}, []));

试用:

var a = [[
[0,0,0,0,0],
[1,1,1,1,0],
[0,0,0,0,0],
[0,1,1,1,1],
[0,0,0,0,0]
]];
let maze = a[0];
let path = [].concat(...maze.reduce((acc, _,row)=> {
let validpath = _.reduce((acc,__,col)=> ((__)&&acc.push({col,row}), acc),[] );
if(validpath.length > 0) acc.push(validpath);
return acc;
}, []));
console.log(path);

注意:请记住,colrow值基于数组的索引,从0开始。

最新更新