-1
我正試圖在圖中找到所有可能路徑中的最短路徑。我寫了下面的程序,當我嘗試從頂點'A'到'D'搜索路徑時,它返回['A','B','C','D']。但最短的距離是['A','B','D']。有沒有辦法找到它,因爲我已經找到了所有可能的節點?找到從頭到尾頂點的圖中的最短路徑
from collections import defaultdict
def find_path(graph,start,end,path=[]):
path = path + [start]
print "intermediate", path
if start == end:
return path
if not graph.has_key(start):
return None
for node in graph[start]:
print "node",node
if node[1] not in path:
newpath = find_path(graph,node[1],end,path)
if newpath :
return newpath
return None
if __name__ == '__main__':
graph = defaultdict(list)
graph = {
'A': [('A','B'),('A','C')],
'B' : [('B','C'),('B','D')],
'C' : [('C','D')],
'D' : [('D','C')],
'E' : [('E','F')],
'F' : [('F','C')]
}
path = find_path(graph,'A','D')
您的代碼無處檢查路徑的長度,或者保留迄今爲止最短路徑的記錄,或者在找到一條路徑後繼續嘗試查找路徑。你需要做大部分。 –
閱讀關於鄰接表和Djikstra的圖的最短路徑算法。 – goelakash
Dijkstra的algorthim是您可能想要查看的一個選項。一些示例代碼可以在這裏找到:http://www.bogotobogo.com/python/python_Dijkstras_Shortest_Path_Algorithm.php –