私は再帰と島を結ぶPythonのDFSを作成しようとしています...しかし、いくつかのケースで出力が不正である論理的な誤りがあるのpython深さ優先探索再帰
他の場合にo o o
o x x
o o o the output is 1 which is correct.
しかし例えば
、
o x o
o x o
o o o the output is 2 which is incorrect.
は、ここに私の論理的なエラーが、私は二度訪問したノードを訪問しているが、私の配列には誤りがないようで、DFSは私の意見では
row = int(input("Enter Row : "))
col = int(input("Enter Col : "))
# declare array baru namanya peta
peta = []
# array 2 dimensi
# Masukkin smua input ke array petas
for i in range(0,row):
line = input()
peta.append(line)
store = []
# declare array baru nama visited
visited = []
for i in range(0,row):
visited.append([])
# buat column di row i false smua
for j in range(0,col):
visited[i].append(False)
def dfs(i,j):
visited[i][j] = True
a = row-1
b = col-1
#peta[i][j] = store[a][b]
for i in range(i,row):
for j in range(j,col):
if(visited[i][j] == True):
return 1
else:
if(peta[i][j] == 'x' and visited[i][j] == False):
#top left array
if(i == 0 or j == 0):
dfs(i+1,j+1)
dfs(i+1,j)
dfs(i,j+1)
#bottom left array
elif(i == a and j == 0):
dfs(i-1,j)
dfs(i-1,j+1)
dfs(i,j+1)
#top right array
elif(i == 0 and j == b):
dfs(i,j-1)
dfs(i+1,j-1)
dfs(i+1,j)
#bottom right array
elif(i == a and j == b):
dfs(i,j-1)
dfs(i-1,j-1)
dfs(i-1,j)
#west array
elif(i >= 1 and j == 0):
dfs(i-1,j)
dfs(i-1,j+1)
dfs(i+1,j)
dfs(i,j+1)
dfs(i+1,j+1)
#north array
elif(i==0 and j>=1):
dfs(i,j-1)
dfs(i+1,j-1)
dfs(i+1,j)
dfs(i,j+1)
dfs(i+1,j+1)
#east array
elif(i>=1 and j==b):
dfs(i-1,j)
dfs(i-1,j-1)
dfs(i,j-1)
dfs(i+1,j-1)
dfs(i+1,j)
#south array
elif(i==a and j>=1):
dfs(i,j-1)
dfs(i-1,j-1)
dfs(i-1,j)
dfs(i-1,j+1)
dfs(i,j+1)
#middle array
else:
dfs(i-1,j-1)
dfs(i-1,j)
dfs(i-1,j+1)
dfs(i,j-1)
dfs(i,j+1)
dfs(i+1,j-1)
dfs(i+1,j)
dfs(i+1,j+1)
else:
#peta[i][j] = 0
return 0
numberofisland = 0
for i in range(0,row):
for j in range(0,col):
if((peta[i][j] == 'x' and visited[i][j] == False)):
dfs(i,j)
numberofisland+=1
print(numberofisland)
機能含まれている私の完全なコードです。私の間違いがどこにあるのか、いくつか提案できますか?
はあなたの時間、歓声
編集いただき、誠にありがとうございます:コミュニティが要求されるように、私は完全なコードのバージョンに更新しています(関数を呼び出す方法、グローバル変数など)
どのようにプログラムで呼びましたか? – leyanpan
どこでDFS関数の戻り値を使用しましたか? – leyanpan
それがあれば、メインプログラム 'にあった((PETA [I] [J] == 'X' と[I] [J] == false)を訪問しました): \t \t \t DFS(i、j)は \t \t \t numberofisland + = 1' – darkknight