拓扑排序错误python

时间:2018-11-09 13:09:00

标签: python python-3.x

输出应该是[1,2,5,4,3,7,6],但是我得到了[1,2,5,4,7,3,6] ...需要帮助修复代码

graph = {1: [2, 3, 4], 2: [4, 5], 3: [6], 4: [3, 6, 7], 5: [4, 7], 6: [], 7: [6]}
output_stack = []


def top_dfs_rec(graph1, start, path):
    path = path + [start]
    for edge in graph1[start]:
        if edge not in path:
           path = top_dfs_rec(graph1, edge, path)
    output_stack.insert(0, start)
    return output_stack


print(top_dfs_rec(graph, 1, []))

2 个答案:

答案 0 :(得分:0)

您的输出和所需的输出因每个子路径的顺序而不同:

for edge in graph1[start]:

这将按顺序遍历图形。我能想到的找到所有解决方案的唯一方法是,对从到的每个边缘重复path = top_dfs_rec(graph1, edge, path),但将它们存储为不同的路径,然后继续递归和重复数据删除。这将更接近广度优先搜索。

否则,请从您的if edge not in path中抽出第二个分支:

if edge not in path:
    path = top_dfs_rec(graph1, edge, path)
else
    <record alternate valid path>

这就是为什么您没有两次出现6(在每个有效路径中)的原因。

答案 1 :(得分:0)

从图的结构来看,节点“ 3”和“ 7”在同一“层”中。因此,拓扑排序是随机选择节点“ 3”和“ 7”之间的。

相关问题