Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python树实现未显示正确的路径_Python_Data Structures_Tree - Fatal编程技术网

Python树实现未显示正确的路径

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" : []

我尝试实现以下代码。但是根据逻辑,节点“a”到“d”的路径输出显示为无,虽然路径可以是“a、c、d”。我想应用BFS、DFS等搜索算法,但在此之前,我需要先实现树,这是不会发生的

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