Python 实现 Dijkstra算法

Python 实现 Dijkstra算法(O(n^2))

  • code


import numpy as np


def dijkstra(graph, node):
    '''Dijkstra Algorithm'''
    '''weight must >= 0'''
    inf = int(1e9)
    g = np.array(graph)
    n = len(g)
    d = np.repeat(inf, n)
    visit = np.repeat(False, n).astype(np.bool)
    for i in range(0, n):
        for j in range(0, n):
            g[i][j] = inf if g[i][j] == 0 else g[i][j]
    for i in range(0, n):
        d[i] = g[node][i]
    visit[node] = True
    d[node] = 0
    for i in range(0, n):
        tmp = inf
        u = node
        for j in range(0, n):
            if not visit[j] and d[j] < tmp:
                tmp = d[j]
                u = j
        visit[u] = True
        for j in range(0, n):
            if not visit[j]:
                d[j] = min(d[j], d[u] + g[u][j])
    return d


if __name__ == '__main__':
    graph = [[0, 1, 12, 0, 0, 0], [1, 0, 9, 3, 0, 0],
             [12, 9, 0, 4, 5, 0],[0, 3, 4, 0, 13, 15],
             [0, 0, 5, 13, 0, 4], [0, 0, 0, 15, 4, 0]]
    for i in range(0, len(graph)):
        dis = dijkstra(graph, i)
        print(dis)

  • result


[ 0  1  8  4 13 17]
[ 1  0  7  3 12 16]
[8 7 0 4 5 9]
[ 4  3  4  0  9 13]
[13 12  5  9  0  4]
[17 16  9 13  4  0]

猜你喜欢

转载自blog.csdn.net/qq_42991793/article/details/87811764
今日推荐