關於01矩陣問題求島嶼個數及面積問題

2021-09-26 13:02:12 字數 2359 閱讀 9066

給定形如下 的矩陣,

[[15, 5],

[0, 1, 0, 1, 0],

[1, 1, 0, 0, 0],

[0, 0, 1, 1, 0],

[0, 1, 0, 1, 0],

[1, 0, 0, 0, 0],

[0, 1, 0, 1, 0],

[1, 1, 0, 0, 0],

[0, 0, 1, 1, 0],

[0, 1, 0, 1, 0],

[1, 0, 0, 0, 0],

[0, 1, 0, 1, 0],

[1, 1, 0, 0, 0],

[0, 0, 1, 1, 0],

[0, 1, 0, 1, 0],

[1, 0, 0, 0, 0],

]上面矩陣的中的0代表海岸線,1代表小島,15為下面陣列的行數,5未陣列的列數。求島嶼的個數及對應的面積。

注意:假設輸入無異常

樣例輸入 :

[5, 5],

[0, 1, 0, 1, 0],

[1, 1, 0, 0, 0],

[0, 1, 1, 1, 0],

[0, 1, 0, 1, 0],

[1, 0, 0, 0, 0],

樣例輸出:

島嶼個數3 面積為 8 , 1, 1

class

solution

:def

__init__

(self, m)

: self.row = m[0]

[0]# 行

self.column = m[0]

[1]# 列

m.pop(0)

self.m = m

self.areas =

defcount_islands

(self)

: count =

0# 遍歷二維陣列,遇到為1的點,就呼叫感染函式

for i in

range

(self.row)

:for j in

range

(self.column)

:if self.m[i]

[j]==1:

0)count +=

1 self.infect(i, j, count +1)

definfect

(self, i, j, flag)

:if i <

0or i >= self.row or j <

0or j >= self.column or self.m[i]

[j]!=1:

return

self.m[i]

[j]= flag # 將上下左右為1的值全部都改寫為某一特定數字,屬於同乙個小島的,數字相同

self.areas[-1

]+=1 self.infect(i, j -

1, flag)

self.infect(i -

1, j, flag)

self.infect(i +

1, j, flag)

self.infect(i, j +

1, flag)

m1 =[[

15,5]

,[0,

1,0,

1,0]

,[1,

1,0,

0,0]

,[0,

0,1,

1,0]

,[0,

1,0,

1,0]

,[1,

0,0,

0,0]

,[0,

1,0,

1,0]

,[1,

1,0,

0,0]

,[0,

0,1,

1,0]

,[0,

1,0,

1,0]

,[1,

0,0,

0,0]

,[0,

1,0,

1,0]

,[1,

1,0,

0,0]

,[0,

0,1,

1,0]

,[0,

1,0,

1,0]

,[1,

0,0,

0,0]

,]s = solution(m1)

s.count_islands(

)areas = s.areas # 島嶼面積列表

num =

len(areas)

# 島嶼個數

print

(areas)

關於求01串組成的島嶼系列問題

給出乙個n行m列的01串,例如 0 1 1 0 1 0 1 0 0 1 1 1 0 1 0 0 0 1 1 0 則該地圖上有三個島嶼面積分別為5,2,3 那麼我們應該應該如何去求這些島嶼的個數以及島嶼的面積呢?我有這樣乙個想法,我們迴圈遍歷這個二維陣列,當遇到1時進行 登陸 所謂 登陸 即用dfs或...

冒險島問題 劃分島嶼與陸地(矩陣求四鄰域個數問題)

冒險島問題 劃分島嶼與陸地 我們可以用乙個二維陣列來描述冒險島的地圖,0表示水域,1表示陸地。四鄰域相近為連通 不包括對角 統計冒險島上有幾個島嶼?輸入 4 5 輸出 2 include stdafx.h include using namespace std 遞迴呼叫,遍歷某個島嶼的所有畫素點 v...

求矩陣最大兩個數

接下來的四行每行包括五個整數。代表乙個四行五列的矩陣,矩陣元素全部是整數。可能有多組測試資料,對於每組資料,按照樣例輸出的格式將每列最大的兩個數輸出,如果最大的兩個數中的乙個數在這一列中有多個相同的值,則行值取行值小的那乙個。輸出時要保留原矩陣的行列順序,即在原矩陣中行值小的,在輸出矩陣中的行值依然...