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