Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.95 KB | None | 0 0
  1. import copy
  2.  
  3. import numpy as np
  4.  
  5. from graph.graph import Graph
  6.  
  7.  
  8. def dijkstra(begin: str, matr):
  9.     size = len(matr)
  10.     matrix = copy.deepcopy(matr)
  11.  
  12.     for i in range(size):
  13.         for j in range(size):
  14.             if matrix[i][j] == 0:
  15.                 matrix[i][j] = np.inf
  16.  
  17.     valid = np.repeat(True, size)
  18.     weight = np.repeat(np.inf, size)
  19.     weight[int(begin) - 1] = 0
  20.     for i in range(size):
  21.         min_weight = np.inf
  22.         id_min_weight = -1
  23.         for j in range(size):
  24.             if valid[j] and weight[j] < min_weight and i is not j:
  25.                 min_weight = weight[j]
  26.                 id_min_weight = j
  27.         for j in range(size):
  28.             if weight[id_min_weight] + matrix[id_min_weight][j] < weight[j]:
  29.                 weight[j] = weight[id_min_weight] + matrix[id_min_weight][j]
  30.         valid[id_min_weight] = False
  31.  
  32.     # for i in range(len(weight)):
  33.     #     if weight[] == np.inf:
  34.     #         weight[i] = 0
  35.  
  36.     return weight
  37.  
  38.  
  39. def floydWorshel(matr, oriented):
  40.     matrix = copy.deepcopy(matr)
  41.     for i in range(len(matrix)):
  42.         for j in range(len(matrix[i])):
  43.             if matrix[i][j] == 0 and i != j:
  44.                 matrix[i][j] = np.inf
  45.             if not oriented:
  46.                 matrix[i][j] = matrix[i][j] / 2
  47.  
  48.     for k in range(len(matrix)):
  49.         for i in range(len(matrix)):
  50.             for j in range(len(matrix)):
  51.                 matrix[i][j] = min(matrix[i][j], matrix[i][k] + matrix[k][j])
  52.  
  53.     return matrix
  54.  
  55.  
  56. def bellmanFord(graph: Graph, begin: str):
  57.     size = graph.size()
  58.     dist = np.repeat(np.inf, size)
  59.     dist[int(begin) - 1] = 0
  60.     for k in range(1, size):
  61.         for i in graph.vertexes.keys():
  62.             for j in graph.vertexes[i].keys():
  63.                 if dist[int(i)-1] + graph.vertexes[i][j][0][0] < dist[int(j)-1]:
  64.                     dist[int(j) - 1] = dist[int(i)-1] + graph.vertexes[i][j][0][0]
  65.     print(dist)
  66.     return dist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement