你会如何编写一个算法来遍历javascript中的数组数组?

时间:2015-05-23 23:18:39

标签: javascript recursion multidimensional-array

你如何在javascript中编写一个递归函数来遍历矩阵/网格(数组数组)类型的数据结构?所以我们说:

  var o = "water"; // water
  var M = "land"; // land

  var board = [ 
    [o,o,o,o,M,o,o,o,o,o],
    [o,o,o,M,M,o,o,o,o,o],
    [o,o,o,o,M,o,o,M,M,o],
    [o,o,M,o,M,o,o,o,M,o],
    [o,o,o,o,M,M,o,o,o,o],
    [o,o,o,M,M,M,M,o,o,o],
    [M,M,M,M,M,M,M,M,M,M],
    [o,o,M,M,o,M,M,M,o,o],
    [o,o,o,o,o,M,M,o,o,o],
    [M,o,o,o,M,M,o,o,o,o]
  ];

我想知道最多连接的“土地”是什么,从任何元素开始并从那里递归遍历地图。但只计算在任何方向上至少由1个元素直接连接的元素(N,NE,E,SE,S,SW,W)。例如,在此地图上运行递归函数应该返回30。

1 个答案:

答案 0 :(得分:0)

这是递归的一个很好的例子。这是JavaScript。

  function continentCounter (board, x, y) {
  // base cases:
  // we fell off the board 
  // or we fell into water
  // or we counted it already
    if (board[x] === undefined || board[x][y] !== 'land') {
      return 0;
    }

    var count = 1;
    board[x][y] = 'counted land';

    count += continentCounter(board, x-1, y-1);
    count += continentCounter(board, x-1, y);
    count += continentCounter(board, x-1, y+1);

    count += continentCounter(board, x, y-1);
    count += continentCounter(board, x, y+1);

    count += continentCounter(board, x+1, y-1);
    count += continentCounter(board, x+1, y);
    count += continentCounter(board, x+1, y+1);


    return count;
  }


  var o = "water"; // water
  var M = "land"; // land

  var board = [ 
    [o,o,o,o,M,o,o,o,o,o],
    [o,o,o,M,M,o,o,o,o,o],
    [o,o,o,o,M,o,o,M,M,o],
    [o,o,M,o,M,o,o,o,M,o],
    [o,o,o,o,M,M,o,o,o,o],
    [o,o,o,M,M,M,M,o,o,o],
    [M,M,M,M,M,M,M,M,M,M],
    [o,o,M,M,o,M,M,M,o,o],
    [o,o,o,o,o,M,M,o,o,o],
    [M,o,o,o,M,M,o,o,o,o]
  ];

  continentCounter(board, 0, 4); // 30