Dijkstra’s shortest path algorithm

 

import sys 
  
class Graph(): 
  
    def __init__(self, vertices): 
        self.V = vertices  #number of vertices
        self.graph = [[0 for column in range(vertices)]  #used for adjacent matrix 
                    for row in range(vertices)] 
   
    def min_d(self, dist, inspt): #to find minimum distance
        min = sys.maxsize 
        for v in range(self.V): 
            if dist[v] < min and inspt[v] == False: #inspt[v] == False,to determine whether the vertices has been included in the shorted path tree.
                min = dist[v] 
                index=v
        return index

    def dijkstra(self, start): 
        dist = [sys.maxsize] * self.V 
        dist[start] = 0
        inspt = [False] * self.V 
        print("Vertex \tDistance from Source")
        for i in range(self.V):
            u = self.min_d(dist,inspt) 
            print(chr(u+65), "\t", dist[u])#print the result
            inspt[u] = True
            for v in range(self.V): 
                if self.graph[u][v] > 0 and inspt[v] == False and dist[v] > dist[u] + self.graph[u][v]: 
                        dist[v] = dist[u] + self.graph[u][v] 
  

g = Graph(12) 
g.graph = [[0, 6, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0], 
        [6, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
        [0, 8, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0], 
        [0, 0, 0, 0, 0, 0, 3, 9, 0, 0, 0, 0], 
        [10, 0, 0, 0, 0, 0, 0, 0, 7, 5, 0, 0], 
        [11, 0, 0, 0, 0, 0, 6, 0, 0, 0, 9, 0], 
        [0, 0, 7, 3, 0, 6, 0, 5, 0, 0, 2, 0], 
        [0, 0, 0, 9, 0, 0, 5, 0, 0, 0, 3, 5], 
        [0, 0, 0, 0, 7, 0, 0, 0, 0, 2, 0, 0],
        [0, 0, 0, 0, 5, 0, 0, 0, 2, 0, 3, 0],  
        [0, 0, 0, 0, 0, 9, 2, 3, 0, 3, 0, 0], 
        [0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0]] 
  
g.dijkstra(0)

out:

Vertex 	Distance from Source
A 	 0
B 	 6
E 	 10
F 	 11
C 	 14
J 	 15
G 	 17
I 	 17
K 	 18
D 	 20
H 	 21
L 	 26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值