給定乙個由'1'
(陸地)和'0'
(水)組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。
示例 1:
輸入:
11110
11010
11000
00000
輸出: 1
示例 2:
輸入:
11000
11000
00100
00011
輸出: 3
import collections
class solution(object):
def is_valid(self, grid, r, c):
m, n = len(grid), len(grid[0])
if r < 0 or c < 0 or r >= m or c >= n:
return false
return true
def numislandsbfs(self, grid):
if not grid or not grid[0]:
return 0
m, n = len(grid), len(grid[0])
count = 0
for i in range(m):
for j in range(n):
if grid[i][j] == "1":
self.bfs(grid, i, j)
count += 1
return count
def bfs(self, grid, r, c):
queue = collections.deque()
grid[r][c] = "0"
while queue:
directions = [(0, 1), (0, -1), (-1, 0), (1, 0)] # 方向鍵
r, c = queue.popleft()
for d in directions:
nr, nc = r + d[0], c + d[1]
if self.is_valid(grid, nr, nc) and grid[nr][nc] == '1':
grid[nr][nc] = '0'
if __name__ == "__main__":
s = solution()
my_sea = [["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"], ["1", "1", "1", "1", "0"],
["1", "1", "1", "1", "0"]]
num = s.numislandsbfs(my_sea)
print(num)
200 島嶼的個數
題目描述 給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1示例 2 輸入 11000 11000 001...
leetcode200 島嶼個數
對方格中的每乙個點為起點進行遍歷。如果找到乙個為1的點,結果就更新。以該點為中心,搜尋四周的點 搜尋流程 如果越界,返回 如果是0,返回 向四周搜尋class solution object def numislands self,grid type grid list list str rtype...
leetcode 200島嶼的個數
主要考察圖搜尋 方法一 染色法,時間o mn 遍歷一遍,再通過bfs或dfs將所有臨近島嶼染色,使用dfs時將numislands中的bfs換成dfs即可 遍歷所有的點 只要遇見陸地 1 投放1枚原子彈,衝擊波以bfs或dfs的形式向外擴散,使得自身及所有相鄰區域全部夷為平地 最終遍歷結束,原子彈使...