【问题标题】:graph theory DFS get the path from start to end node图论 DFS 获取从开始到结束节点的路径
【发布时间】:2019-05-31 21:31:08
【问题描述】:

我只需要一条从源节点到目标节点的路径,就可以从这个函数返回,但是这个函数在路径被发现后不会停止。 我只在找到结束节点时才使用返回。 找到路径后如何结束它。 我的情况只有一条路,没有循环 一个节点最多有4个子节点

def  dfs(gpdic,start,end,visited,path):
   visited[start] = 1
   path.append(start)
   print(f"start node {start}")

   if start == end:
       print(f"this is the path {path}")
       return path
   else:
       print(f"stack {path}")
       for node in gpdic[start]:
           print(f" in node - {node}")
           if visited[node]== -1 and node != -1 and node != 0 :
               print(f" calling for next recursive funtion {node} ")
               dfs(gpdic,node,end,visited,path)
               #return path
    po =  path.pop()
    print(f" poped last {po}")
    visited[start] = -1

if __name__ == '__main__':
    gp = {1: [2, -1, -1, -1], 2: [3, 4, 1, 5], 3: [6, -1, 2, 7],
    4:[-1, -1, -1, 2], 5: [-1, 2, -1, -1], 6: [-1, -1, 3, -1],
    7[-1, 3, -1, -1]}


    visited = [-1] * 12
    path = []
    pathret = dfs(gp,7,4,visited,path)
    print(f"finale path - > {pathret}")

【问题讨论】:

    标签: python recursion graph-theory


    【解决方案1】:

    问题解决只需要从函数中获取返回变量并进行比较

    def dfs(gpdic,start,end,visited,path):
       visited[start] = 1
       path.append(start)
       print(f"start node {start}")
    
       if start == end:
           print(f"this is the path {path}")
           return path
       else:
           print(f"stack {path}")
           for node in gpdic[start]:
               print(f" in node - {node}")
               if visited[node]== -1 and node != -1 and node != 0 :
                   print(f" calling for next recursive funtion {node} ")
                   l = dfs(gpdic,node,end,visited,path)
                   if l is not None:
                       return path
        po =  path.pop()
        print(f" poped last {po}")
        visited[start] = -1
    
    if __name__ == '__main__':
        gp = {1: [2, -1, -1, -1], 2: [3, 4, 1, 5], 3: [6, -1, 2, 7],
        4:[-1, -1, -1, 2], 5: [-1, 2, -1, -1], 6: [-1, -1, 3, -1],
        7[-1, 3, -1, -1]}
    
    
    visited = [-1] * 12
    path = []
    pathret = dfs(gp,7,4,visited,path)
    print(f"finale path - > {pathret}")
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多