题目
给定一个矩阵,只有0和1两值,每个岛位置为1,岛可以和上下左右任意位置的岛连接,多个岛连接起来的岛称作一片岛屿,求一共几片岛屿
/** 如下有三个岛屿
* [0,0,1,0,1,0]
* [1,1,1,0,1,0]
* [1,0,0,1,0,0]
* [0,0,0,0,0,0]
*/
- 通过感染的思路,当遍历到1时,构造上下左右到递归结果,去感染所有的1,将其设置成2,最终外部触发几次感染就有几片岛屿
/**
* [0,0,1,0,1,0]
* [1,1,1,0,1,0]
* [1,0,0,1,0,0]
* [0,0,0,0,0,0]
*/
function islands(arr) {
// 获取行、列
const line = arr.length;
const column = arr[0].length;
let res = 0;
for (let i = 0; i < line; i++) {
for (let j = 0; j < column; j++) {
if (arr[i][j] === 1) {
res++;
infect(i, j, arr, line, column);
}
}
function infect(i, j, arr, line, column) {
if (arr[i][j] !== 1 || i > line || j > column || i < 0 || j < 0) {
return;
}
arr[i][j] = 2;
// 上
infect(i - 1, j, arr, line, column);
// 右
infect(i, j + 1, arr, line, column);
// 下
infect(i + 1, j, arr, line, column);
//左
infect(i, j - 1, arr, line, column);
}
return res;
}