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

时间:2018-12-05 19:40:51

标签: javascript arrays

我正在尝试创建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);
        }
    }
 };
};

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此代码将遍历迷宫并将其值减小为包含正确路径的每个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开始)的。