Advertisement
jbn6972

sending email

Oct 17th, 2021
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.38 KB | None | 0 0
  1. import sys
  2. import os
  3. if not os.environ.get("ONLINE_JUDGE"):
  4.     sys.stdin = open('./in.txt', 'r')
  5.     sys.stdout = open('./out.txt', 'w')
  6.  
  7. inf = sys.maxsize
  8.  
  9.  
  10. class Graph():
  11.     def __init__(self, v):
  12.         self.V = v
  13.         self.graph = [[0 for _ in range(v)] for _ in range(v)]
  14.  
  15.     def mindist(self, dist, dist_set):
  16.         min = sys.maxsize
  17.         min_index = -1
  18.         for v in range(self.V):
  19.             if dist[v] < min and dist_set[v] == False:
  20.                 min = dist[v]
  21.                 min_index = v
  22.  
  23.         return min_index
  24.  
  25.     def dijkstra(self, src, T):
  26.         dist = [sys.maxsize] * self.V
  27.         dist[src] = 0
  28.         dist_set = [False] * self.V
  29.  
  30.         for node in range(self.V):
  31.             u = self.mindist(dist, dist_set)
  32.             dist_set[u] = True
  33.  
  34.             for v in range(self.V):
  35.                 if self.graph[u][v] > 0 and dist_set[v] == False and dist[v] > dist[u] + self.graph[u][v]:
  36.                     dist[v] = dist[u] + self.graph[u][v]
  37.  
  38.         return dist[T]
  39.  
  40.  
  41. for N in range(int(input())):
  42.     n, m, S, T = map(int, input().split())
  43.  
  44.     g = Graph(n)
  45.     for _ in range(m):
  46.         u, v, c = map(int, input().split())
  47.         g.graph[u][v] = c
  48.         g.graph[v][u] = c
  49.  
  50.     ans = g.dijkstra(S, T)
  51.     if ans == inf:
  52.         print(f"Case #{N+1}: unreachable")
  53.     else:
  54.         print(f"Case #{N+1}: {ans}")
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement