200 島嶼的個數

2022-03-28 10:23:01 字數 1498 閱讀 4291

給定乙個由'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的形式向外擴散,使得自身及所有相鄰區域全部夷為平地 最終遍歷結束,原子彈使...