你如何在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。
答案 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