下面是一个使用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(graph)
print(start)
print(dist)
print(prev)
if __name__ == "__main__":
run_dijkstra(7, 11)
[[40, 65, 4, 41, 27, 40, 34, 28, 63, 19, 52], [61, 80, 90, 68, 36, 20, 90, 82, 79, 56, 57],
[50, 21, 63, 4, 2, 82, 77, 94, 51, 79, 86], [79, 16, 21, 23, 92, 24, 64, 64, 28, 61, 50],
[39, 91, 57, 70, 18, 89, 19, 95, 43, 30, 82], [25, 75, 20, 56, 72, 20, 5, 48, 58, 25, 15],
[30, 97, 48, 100, 48, 24, 43, 60, 60, 78, 87]]
4
[105, 118, 104, 97, 106, 116, 123]
[4, 4, 4, 4, 2, 4, 4]
在这个测试程序中,我们定义了一个dijkstra函数来执行迪杰特斯拉算法,并使用generate_graph函数生成一个随机图。然后,我们使用run_dijkstra函数来运行迪杰特斯拉算法,并打印出计算得到的距离和前驱节点。
请注意,在实际应用中,您需要根据具体的需求和场景选择合适的算法和数据结构,并进行适当的优化和调参,以获得更好的性能和效果。同时,您也需要注意代码的可读性和可维护性,并尽可能避免出现潜在的错误和异常情况。
开发工具:pycharm 2019.3
微信Alt+A截屏工具