菜鸟教程 练习实例48 (python3)

xiaoxiao2021-02-28  46

# -*- coding: UTF-8 -*- # Dijkstra算法 def dijkstra_shortest_paths(graph, v0): v_num = graph.vertex_num() assert 0 <= v0 < v_num paths = [None] * v_num count = 0 cands = PrioQueue([(0, v0, v0)]) while count < v_num and not cands.is_empty(): plen, u, v_num = cands.dequeue() if paths[v_min]: countine paths[v_num] = (u, plen) for v, w in graph.out_edges(v_min): if not paths[v]: cands.enqueue((plen + w, v_min, v)) count += 1 return paths # Floyd算法 def all_shortest_paths(graph): v_num = graph.vertex_num() a = [[graph.get_edge(i, j) for j in range(v_num)] for i in range(v_num)] nvertex = [[-1 if a[i][j] == inf else j for i in range(v_num)] for i in range(v_num)] for k in range(v_num): for i in range(v_num): for j in range(v_num): if a[i][j] > a[i][k] + a[k][j]: a[i][j] = a[i][k] + a[k][j] nvertex[i][j] = nvertex[i][k] return (a, nvertex)
转载请注明原文地址: https://www.6miu.com/read-2622718.html

最新回复(0)