在python中,我有一個圖形作爲鄰接列表表示。 以及特定點到圖中所有其他元素的距離。在圖中回溯
graph = {
1 :[2, 7],
2 :[1, 3],
3 :[2, 4, 8],
4 :[3, 5, 9],
5 :[4, 6, 9],
6 :[5, 8, 10],
7 :[1, 8,10],
8 :[3, 6, 7, 9],
9 :[4, 5, 8],
10:[7, 6]
}
distance = {1: 1, 2: 0, 3: 0, 4: 1, 5: 2, 6: 2, 7: 2, 8: 1, 9: 2, 10: 3}
我如何從一個元素原路返回的路徑: 例如,如果我會嘗試從10原路返回,它應該返回:
[10, 7, 1, 2]
[10, 7, 8, 3]
[10, 6, 8, 3]
我試圖做這個遞歸
def findprev(graph, distance, el, path = []):
value = distance[el]
if value == 0:
print path
path = []
for i in graph[el]:
if value - 1 == distance[i]:
path.append(i)
path = findprev(graph, distance, i, path)
return path
但顯然我正在失去一些重要的東西,因爲結果是:
[7, 1, 2]
[8, 3]
[6, 8, 3]
誰能幫助找到一個bug
這並不是「回溯」(在計算機科學意義上),而是通過搜索(例如DFS,BFS)在圖中兩個節點之間找到路徑。 – ninjagecko 2012-04-28 14:34:42
http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – 2012-04-28 15:15:50