题目: 给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
eg1:
[
[1,1,1,1,0],
[1,1,0,1,0],
[1,1,0,0,0],
[1,0,0,0,0]
]
控制台输出 1
eg2:
[
[1,1,1,0,0,0,1],
[1,0,1,0,0,0,1],
[0,1,0,0,0,0,0],
[1,1,1,0,0,0,1],
[1,0,1,0,0,0,0],
[1,1,1,0,0,0,1],
]
控制台输出 5
对于这个算法题来说,难者不会,会者不难。这里我主要说一下我的解题思路。
既然是搜索整个地图上的岛屿数量,遍历整个二维数组是一定需要的了,深度遍历有DFS和BFS两种方法,这里我选择的是DFS。
在进行遍历的过程中,会探索 当前节点为1的上下左右节点,如果临节点也为1则继续探索,直到所有相邻节点都为 0.停止当前岛屿探索。继续探索下一个岛屿。
代码如下:
function caculate(arr){
var width, height, res;
res = 0;
height = arr.length;
width = arr[0].length;
for(var i =0; i<height; i++){ //DFS遍历
for(var j=0; j<width; j ++){
if(arr[i][j] ===