输出应该是[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, []))
答案 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”之间的。