2025年6月18日 星期三

島嶼計算

 def dfs(r, c):

    # 超出邊界或是水域就返回

    if r < 0 or r >= rows or c < 0 or c >= cols or grid[r][c] == '0':

        return

    

    # 標記為已訪問

    grid[r][c] = '0'

    

    # 探索四個方向

    dfs(r+1, c)  # 下

    dfs(r-1, c)  # 上  

    dfs(r, c+1)  # 右

    dfs(r, c-1)  # 左


# 案例 : 三個島嶼

grid = [

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

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

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

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

      ]


# 顯示原始網格

for row in grid:

    print(''.join(row))


islands = 0

rows, cols = len(grid), len(grid[0])


# 遍歷網格-找到一個1就會利用dfs(r,c)把相鄰的1改為0,即標示為已訪問

for r in range(rows):

    for c in range(cols):

        if grid[r][c] == '1':

            islands += 1

            dfs(r, c)


print(f"{islands} 個島嶼")


# 顯示原始網格

for row in grid:

    print(''.join(row))

    

Output:


11000

11000

00100

00011

3 個島嶼

00000

00000

00000

00000

沒有留言:

張貼留言