[英]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] = 1
且A[nr][nc] == 1
且if 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.