【发布时间】:2017-09-26 02:09:21
【问题描述】:
我正在尝试用递归创建一个 python dfs 连接岛......
程序运行良好,但在某些情况下会出现输出不正确的逻辑错误
例如
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)
在我看来,我的逻辑错误是我两次访问访问的节点,但是我的数组中似乎没有错误。你能就我的错误在哪里提出一些建议吗?
非常感谢您的宝贵时间,干杯
编辑:我已根据社区要求更新为完整代码版本(如何调用函数、全局变量等)
【问题讨论】:
-
你在程序中是怎么调用的?
-
你在哪里使用了DFS函数的返回值?
-
它在主程序
if((peta[i][j] == 'x' and visited[i][j] == False)): dfs(i,j) numberofisland+=1 -
由于整个函数中只有两个return语句,即“return 0”和“return 1”,所以你的函数只能返回0或1,这可能是错误的,所以请确保你没有犯任何复制粘贴错误。此外,如果您将整个脚本包含在您的问题中,这将很有帮助,以便人们可以自己运行它。
-
另外,更清楚你的函数应该做什么:在图中找到connected components 的数量?并且对角相邻的 X 是否被认为是同一组件(岛)的一部分,还是只有直接位于左侧、右侧、顶部或底部的 X?
标签: python recursion microsoft-distributed-file-system