vov44k

Untitled

Feb 16th, 2023
841
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.00 KB | None | 0 0
  1. n, start, f = map(int, (input().split()))
  2. f -= 1
  3. start -= 1
  4. w = [[int(x) for x in input().split()] for _ in range(n)]
  5. dist = [float("inf") for x in range(n)]
  6. path = [(-1) for x in range(n)]
  7. used = [False for x in range(n)]
  8.  
  9.  
  10. def deix(start):
  11.     dist[start] = 0
  12.     for i in range(n):
  13.         imin = n
  14.         for j in range(n):
  15.             if imin == n and (not (used[j])):
  16.                 imin = j
  17.             if imin != n and dist[j] < dist[imin] and not (used[j]):
  18.                 imin = j
  19.         used[imin] = True
  20.         for j in range(n):
  21.             if (w[imin][j] != -1) and not (used[j]):
  22.                 if w[imin][j] + dist[imin] < dist[j]:
  23.                     dist[j] = w[imin][j] + dist[imin]
  24.                     path[j] = imin
  25.  
  26.  
  27. deix(start)
  28. if dist[f] < float("inf"):
  29.     ans = []
  30.  
  31.     while f != start:
  32.         if path[f] != -1:
  33.             ans.append(f + 1)
  34.             f = path[f]
  35.     ans.append(start + 1)
  36.     ans.reverse()
  37.     print(*ans)
  38. else:
  39.     print(-1)
  40.  
Advertisement
Add Comment
Please, Sign In to add comment