'''
示例结果:
init
[1, 0, 0, 0, 0, 0] [0, 30, 15, 1000, 1000, 1000] [0, 0, 0, 0, 0, 0]
process
[1, 1, 1, 1, 1, 1] [0, 25, 15, 50, 40, 30] [2, 1, 5, 4, 3, 0]
'''
MAX_NUM = 1000
v_len = 6 #顶点数
S = [0 for i in range(v_len)] #作为mark容器,检验顶点是否已经被添加
path = S[:] #存储添加顶点过程
dist = [] #放置到每个顶点的最短长度
'''邻接矩阵'''
edge = [
[0,30,15,MAX_NUM,MAX_NUM,MAX_NUM],
[5,0,MAX_NUM,MAX_NUM,20,30],
[MAX_NUM,10,0,MAX_NUM,MAX_NUM,15],
[MAX_NUM,MAX_NUM,MAX_NUM,0,MAX_NUM,MAX_NUM],
[MAX_NUM,MAX_NUM,MAX_NUM,10,0,MAX_NUM],
[MAX_NUM,MAX_NUM,MAX_NUM,30,10,0]
]
def init(start):
for i in range(0,v_len):
dist.append(edge[start][i])
dist[start] = 0
S[start] = 1
path[0] = start
print 'init\n',S,dist,path #初始化结果显示
def find_min(): #开始处理
print 'process'
u = 0
for i in range(0,v_len-1):
mini = MAX_NUM
for j in range(0,v_len):
if(not S[j] and dist[j]<mini):
u = j
mini = dist[j]
S[u] = 1
path[i] = u
for k in range(0,v_len):
if(not S[k] and edge[u][k]<MAX_NUM and dist[u]+edge[u][k]<dist[k]):
dist[k] = dist[u] + edge[u][k]
print S,dist,path; #显示结果
def py_dijkstra(start):
init(start)
find_min()
if(__name__=="__main__"):
py_dijkstra(0) #以0为源点
python编写dijkstra算法
最新推荐文章于 2024-08-13 20:47:36 发布