图中所有节点到尾节点路径

算法1.从起始节点,以递归的方式逐渐查找子节点,记录走过的路径,直到走到尾节点后,生成的路径就是从起始节点到尾节点所有的可能路径。

算法适用于树的路径查找,从明确的起始点走到叶子节点,即树形结构;

def get_path_bfs(start_node,path=[]):
    if start_node 不是叶子节点
        for node in start_node.childrens:
            get_path(node,path+[start_node,node])
    else:
        当前path存储从头结点到尾结点的所有路径

2.图结构中存在多个起始结点,查找所有起始结点到尾结点的路径

可以遍历每个结点,每个结点按算法1获取相应的路径,问题,结点重复遍历,影响性能;

采用深度优先算法,由尾结点逐渐向上遍历,生成从从起始结点到为结点的路径

nodes_dict={}
visited=[0 ]*(nodes.length)
def travel_dfs:
    for i in range(nodes.length)
        if visited[i]==0:
            cur_path=[]
            for node in nodes[i].childrens
                child_node=dfs(node)
                """
                保存数据格式的统一,如果node不是叶子节点返回的数据为[[(a,b),(c,d)],[(a,d)]],如果是也是结点返回为[],
                当前路径为[(nodes[i],node)]
                """
                if child_node:
                    cur_path.extend([[(nodes[i],node)]+d for d in child_node])
                else:
                    cur_path.append([(nodes[i],node)])
            visited[i]=1
            nodes_dict[i]=cur_path
def dfs(node_i):
    if node 是叶子节点
        return []
    if visited[node_i]==0:
        cur_path = []
        for node in nodes[node_i].childrens
            child_node = dfs(node)
            if child_node:
                cur_path.extend([[(nodes[node_i], node)] + d for d in child_node])
            else:
                cur_path.append([(nodes[i], node)])
        visited[node_i] = 1
        nodes_dict[node_i] = cur_path
        return cur_path
    else:
        return nodes_dict[node]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值