Javascript实现岛问题:一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?

问题描述:

       一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右 四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?

举例:  下面这个矩阵中有4个岛。

let arrIsland = [
	[0,0,1,0,1,0],
	[1,1,1,0,1,0],
	[1,0,0,1,0,0],
	[0,0,0,0,0,1]
];

 

实现思路:

1.遍历整个矩阵,当 arr[i][j] === 1 时,将其值改成2,同时 岛的数量 +1;

2.将这个位置的 上、下、左、右 的四个位置的值都检查一遍,(递归实现)

  • 位置 i,j超出边界 或 该位置的值 不等于1,返回;
  • 不是上面的情况,则:将该位置的值改为 2 ,再重复步骤2。

 

代码:

function islandCount(arr){
	if (!arr || arr.length === 0) {
		return;
	};
	let N = arr.length, M = arr[0].length, res = 0;
	for(let i = 0; i < N; i++){
		for(let j = 0; j < M; j++){
			if (arr[i][j] === 1) {
				++res;
				infect(arr,i,j,N,M);
			}
		}
	}
	return res;
}
function infect(arr,i,j,N,M){
	if (i < 0 || j < 0 || i >= N || j >= M || arr[i][j] !== 1) {
		return;
	};
	arr[i][j] = 2;
	infect(arr,i,j-1,N,M);
	infect(arr,i+1,j,N,M);
	infect(arr,i,j+1,N,M);
	infect(arr,i-1,j,N,M);
}
let arrIsland = [
	[0,0,1,0,1,0],
	[1,1,1,0,1,0],
	[1,0,0,1,0,0],
	[0,0,0,0,0,1]
];
console.log(islandCount(arrIsland));  // 4

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章