下面是一个使用Python实现迪杰特斯拉算法的测试程序,可以用于验证算法的正确性和性能:
import random
import sys %笔者添加的导包程序
def dijkstra(graph, start):
n = len(graph)
dist = [sys.maxsize] * n
prev = [None] * n
dist[start] = 0
for i in range(n-1):
min_dist = sys.maxsize
min_index = -1
for j in range(n):
if graph[i][j] > 0 and dist[j] < min_dist: %笔者修改的程序
min_dist = dist[j]
min_index = j
dist[min_index] += graph[i][min_index]
for j in range(n):
if graph[min_index][j] > 0 and dist[j] > dist[min_index] + graph[min_index][j]:
dist[j] = dist[min_index] + graph[min_index][j]
prev[j] = min_index
return dist, prev
def generate_graph(n, m):
graph = [[0] * m for i in range(n)]
for i in range(n):
for j in range(m):
graph[i][j] = random.randint(1, 100)
return graph
def run_dijkstra(n, m):
graph = generate_graph(n, m)
start = random.randint(0, n-1)
dist, prev = dijkstra(graph, start)
print(start) %笔者添加的打印语句
print(dist)
print(prev)
if __name__ == "__main__":
run_dijkstra(100, 1000)
23
[126, 122, 115, 120, 133, 120, 114, 123, 132, 115, 110, 144, 124, 133, 133, 118, 158, 110, 121, 123, 132, 113, 119, 123, 120, 132, 162, 122, 113, 120, 131, 111, 116, 133, 114, 111, 120, 111, 118, 113, 132, 120, 111, 111, 143, 143, 175, 129, 149, 122, 150, 126, 125, 114, 134, 110, 146, 163, 116, 112, 151, 134, 135, 144, 202, 111, 136, 126, 139, 113, 132, 122, 119, 109, 116, 122, 133, 150, 126, 148, 117, 109, 127, 151, 110, 109, 115, 115, 135, 114, 113, 138, 115, 120, 111, 117, 109, 130, 114, 124]
[23, 10, 81, 81, 10, 72, 10, 72, 49, 28, 16, 25, 10, 10, 23, 28, 10, 83, 28, 23, 82, 49, 10, 38, 72, 78, 16, 75, 23, 81, 78, 81, 28, 90, 36, 18, 10, 10, 51, 10, 18, 49, 36, 10, 71, 10, 16, 82, 91, 18, 82, 10, 90, 83, 14, 49, 51, 82, 78, 78, 10, 10, 82, 38, 16, 16, 70, 38, 12, 12, 51, 10, 51, 50, 18, 12, 10, 56, 90, 82, 51, 12, 78, 99, 23, 51, 28, 90, 10, 83, 12, 83, 16, 83, 78, 78, 18, 28, 23, 10]
在这个测试程序中,我们定义了一个dijkstra函数来执行迪杰特斯拉算法,并使用generate_graph函数生成一个随机。然后,我们使用run_dijkstra函数来运行迪杰特斯拉算法,并打印出计算得到的距离和前驱节点。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点