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

 

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