Python树实现未显示正确的路径
我尝试实现以下代码。但是根据逻辑,节点“a”到“d”的路径输出显示为无,虽然路径可以是“a、c、d”。我想应用BFS、DFS等搜索算法,但在此之前,我需要先实现树,这是不会发生的Python树实现未显示正确的路径,python,data-structures,tree,Python,Data Structures,Tree,我尝试实现以下代码。但是根据逻辑,节点“a”到“d”的路径输出显示为无,虽然路径可以是“a、c、d”。我想应用BFS、DFS等搜索算法,但在此之前,我需要先实现树,这是不会发生的 graph = { "a" : ["c"], "b" : ["c", "e"], "c" : ["a", "b", "d", "e"], "d" : ["c"], "e" : ["c", "b"], "f" : []
graph = { "a" : ["c"],
"b" : ["c", "e"],
"c" : ["a", "b", "d", "e"],
"d" : ["c"],
"e" : ["c", "b"],
"f" : []
}
def find_path(graph, start, end, path =[]):
path = path + [start]
if start == end:
return path
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath:
return newpath
return None
print(find_path(graph, 'a', 'd'))
在检查所有连接的节点之前,返回None
graph = { "a" : ["c"],
"b" : ["c", "e"],
"c" : ["a", "b", "d", "e"],
"d" : ["c"],
"e" : ["c", "b"],
"f" : []
}
def find_path(graph, start, end, path =[]):
print(f'start={start}, end={end}, path={path}, call find_path')
path = path + [start]
print(f'start={start}, end={end}, path={path}, append start to path')
if start == end:
return path
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath:
return newpath
# return None <---- You return to early
print(find_path(graph, 'a', 'd'))
>>> ['a', 'c', 'd']
这些就是你的步骤(找不到路线)
在检查所有连接的节点之前,返回None
graph = { "a" : ["c"],
"b" : ["c", "e"],
"c" : ["a", "b", "d", "e"],
"d" : ["c"],
"e" : ["c", "b"],
"f" : []
}
def find_path(graph, start, end, path =[]):
print(f'start={start}, end={end}, path={path}, call find_path')
path = path + [start]
print(f'start={start}, end={end}, path={path}, append start to path')
if start == end:
return path
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath:
return newpath
# return None <---- You return to early
print(find_path(graph, 'a', 'd'))
>>> ['a', 'c', 'd']
这些就是你的步骤(找不到路线)
graph
leafs是否仅被视为列表?是的,我正在使用列表存储子节点。最大深度级别是多少?下面是一个类似且更好的方法:最大级别是leaf节点。graph
leafs是否仅被视为列表?是,我使用列表来存储子节点。最大深度级别是多少?这里有一个类似且更好的方法:最大级别是叶节点。谢谢Raphael!它工作得非常好,但我有一个疑问,在第9行的“return None”解决方案中,它从['a','c','b','e']更改为['a','c']?对我来说似乎没问题。这只是另一个“分支”。它以a,c开头。从那里它可以转到a,c,b
,a,c,d
或a,c,e
<首先尝试代码>a、c、b。从那里它可以转到a、c、b、e
,但不能再进一步。它返回到a,c
并转到a,c,d
。哦,好的,明白了!谢谢那么,我可以在上面实现BFS/DFS或任何算法吗?它不会受到影响,对吗?另外,我只想打印上一次迭代,我尝试了缩进,但它显示了错误的缩进。你能帮忙吗?你现在已经是深度优先了。你到底想打印什么?路径由函数alreayThanks Raphael返回!它工作得非常好,但我有一个疑问,在第9行的“return None”解决方案中,它从['a','c','b','e']更改为['a','c']?对我来说似乎没问题。这只是另一个“分支”。它以a,c开头。从那里它可以转到a,c,b
,a,c,d
或a,c,e
<首先尝试代码>a、c、b。从那里它可以转到a、c、b、e
,但不能再进一步。它返回到a,c
并转到a,c,d
。哦,好的,明白了!谢谢那么,我可以在上面实现BFS/DFS或任何算法吗?它不会受到影响,对吗?另外,我只想打印上一次迭代,我尝试了缩进,但它显示了错误的缩进。你能帮忙吗?你现在已经是深度优先了。你到底想打印什么?该路径由函数alreay返回
start=a, end=d, path=[], call find_path
start=a, end=d, path=['a'], append start to path
start=c, end=d, path=['a'], call find_path
start=c, end=d, path=['a', 'c'], append start to path
start=b, end=d, path=['a', 'c'], call find_path
start=b, end=d, path=['a', 'c', 'b'], append start to path
start=e, end=d, path=['a', 'c', 'b'], call find_path
start=e, end=d, path=['a', 'c', 'b', 'e'], append start to path