#!/usr/bin/python3.4 import copy distance={(1,2):2,(1,3):1,(2,3):2,(2,4):1,(2,5):3,(3,4):4,(4,5):1,(3,6):3,(5,7):4,(6,7):1} maxcount=7 stack=list() dst=dict() path=dict() def Probe(sourcenode,desnode): if sourcenode==desnode: return stack.append(sourcenode) for i in range(1,maxcount+1): if (sourcenode,i) in distance.keys() and i not in stack: if (dst.get(sourcenode,0)+distance[(sourcenode,i)] < dst.get(i,1000)): dst[i]=dst.get(sourcenode,0)+distance[(sourcenode,i)] path[i]=sourcenode if sourcenode in dst.keys(): del dst[sourcenode] if not len(dst.keys()): return True item=sorted(dst.items(),key=lambda d:d[1])[0][0] Probe(item,desnode) def searchPath(sourcenode,desnode): if sourcenode == desnode : return if desnode in path.keys(): searchPath(sourcenode,path[desnode]) print('path %d->%d'%(path[desnode],desnode)) Probe(2,7) print(path) searchPath(2,6)
Probe为生成路径信息
searchPath(s,d) 为打印最短路径
本例输出为:
{3: 2, 4: 2, 5: 4, 6: 3, 7: 5}
path 2->3
path 3->6
从2->6的最短路径为: 先2到3,再3到6.