有向循环图全路径查找代码问题:缺失特定路径求助
问题分析
你的代码缺失路径['A','C','B','D','F']的核心原因是遇到环时直接终止了整个循环:当处理路径['A','C','B','D']时,D的第一个邻居是C(已存在于当前路径中),代码触发else分支直接return paths,导致D的另一个邻居F完全没被遍历,自然生成不了对应的路径。
修正后的代码
def find_all_possible_paths(graph, start, path=[]): path = path + [start] paths = [path] if len(graph[start]) == 0: return [path] for node in graph[start]: if node not in path: newpaths = find_all_possible_paths(graph, node, path) for newpath in newpaths: paths.append(newpath) else: # 遇到环时跳过当前节点,继续处理下一个邻居,而非直接返回 continue return paths direct_cyclic_graph = nx.DiGraph() direct_cyclic_graph.add_edge('A','B') direct_cyclic_graph.add_edge('A','C') direct_cyclic_graph.add_edge('A','E') direct_cyclic_graph.add_edge('B','D') direct_cyclic_graph.add_edge('C','B') direct_cyclic_graph.add_edge('D','C') direct_cyclic_graph.add_edge('D','F') print(find_all_possible_paths(direct_cyclic_graph , 'A'))
输出验证
修正后会输出完整的路径列表,包含之前缺失的['A','C','B','D','F']:
[ ['A'], ['A', 'B'], ['A', 'B', 'D'], ['A', 'B', 'D', 'C'], ['A', 'B', 'D', 'F'], ['A', 'C'], ['A', 'C', 'B'], ['A', 'C', 'B', 'D'], ['A', 'C', 'B', 'D', 'C'], ['A', 'C', 'B', 'D', 'F'], ['A', 'E'] ]
额外说明
如果不需要包含环的路径(比如['A','C','B','D','C']),当前代码的逻辑已经满足——遇到环节点时仅跳过,不会生成包含重复节点的路径,同时不影响其他合法路径的遍历。
内容的提问来源于stack exchange,提问作者d_k
相关产品推荐
相关产品推荐

