簡體   English   中英

用於查找島蟒的 DFS

[英]DFS for finding Island Python

我一直在嘗試這種方法一段時間,並不斷獲得 0 的島嶼數。 我不太確定我在這里做錯了什么。 隨着我越來越多地開始學習 python,所以我可能會遺漏一些很容易發現的東西。

所以我想找到所有帶有 1 的島嶼,以及它們是否相連(相鄰單元格)。 所以我想返回找到的島嶼數量的計數。

這是我到目前為止所擁有的。

def valid_direction(A, r, c):
    row = len(A)
    col = len(A[0])
    if r < 0 or c < 0 or r >= row or c >= col:
        return False
    else:
        return True

def dfs(A, r, c):
    A[r][c] = '1'
    # Up down left and right
    directions = [(0,1), 
                  (0,-1), 
                  (-1,0),
                  (1,0)] 
    for d in directions:
        nr = r +d[0]
        nc = c + d[1]
        if valid_direction(A, nr, nc) and A[nr][nc] == '1':
            dfs(A, nr, nc)


def solution(A):
    if not A:
        return -1

    row = len(A)
    col = len(A[0])
    results = 0
    for i in range(row):
        for j in range(col):
            if A[i][j] == '1':
                dfs(A, i, j)
                results +=1
    return results

這是我正在使用的兩個數組

A1 = [[1,1,1,1,0],
      [1,1,0,1,0],
      [1,1,0,0,0,],
      [0,0,0,0,0]]

A2 = [[1,1,0,0,0],
      [1,1,0,0,0],
      [0,0,1,0,0],
      [0,0,0,1,1]]

你犯了一個簡單的錯誤。 您的數組是整數數組,而不是字符數組。
A[r][c] = '1'A[nr][nc] == '1'並且if A[i][j] == '1'
應該
A[r][c] = 1A[nr][nc] == 1if A[i][j] == 1
我不確定在此之后它會正確解決問題,但這是當前的錯誤。


您當前的代碼只計算 1 的數量。
您應該通過將其更改為 2 來檢查 1 是否被訪問過。
此外,您不必每次調用 dfs 時都啟動指示,您應該將其放在函數之外。

directions = [(0,1), 
              (0,-1), 
              (-1,0),
              (1,0)]

def valid_direction(A, r, c):
    row = len(A)
    col = len(A[0])
    if r < 0 or c < 0 or r >= row or c >= col:
        return False
    else:
        return True

def dfs(A, r, c):
    A[r][c] = 2
    # Up down left and right 
    for d in directions:
        nr = r +d[0]
        nc = c + d[1]
        if valid_direction(A, nr, nc) and A[nr][nc] == 1:
            dfs(A, nr, nc)


def solution(A):
    if not A:
        return -1

    row = len(A)
    col = len(A[0])
    results = 0
    for i in range(row):
        for j in range(col):
            if A[i][j] == 1:
                dfs(A, i, j)
                results +=1
    return results

我不完全確定您要解決什么問題,但我認為正確的代碼是這樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM