deikstra.py 842 B

123456789101112131415161718192021
  1. from graph import Graph
  2. import numpy as np
  3. graph = Graph.build([[0, 10, 30, 50, 10],
  4. [0, 0, 0, 0, 0],
  5. [0, 0, 0, 0, 10],
  6. [0, 40, 20, 0, 0],
  7. [10, 0, 10, 30, 0]])
  8. weights = np.zeros(len(graph.verticles))
  9. verticles_weights = weights.copy()
  10. verticles_weights[1:] = np.inf
  11. while verticles_weights[np.isnan(verticles_weights) == False].shape[0] != 0:
  12. current_node = np.nanargmin(verticles_weights)
  13. new_weights = graph.matrix[current_node] + verticles_weights[current_node]
  14. logical = np.logical_and(verticles_weights > new_weights, new_weights != verticles_weights[current_node])
  15. verticles_weights[logical] = new_weights[logical]
  16. weights[current_node], verticles_weights[current_node] = verticles_weights[current_node], np.nan
  17. print(weights)