Dijkstra Algorithm
import sys
INF = int(1e9)
n, m = map(int, sys.stdin.readline().split())
start = int(sys.stdin.readline().rstrip())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
distance = [INF] * (n+1)
for _ in range(m):
a, b, c = map(int, sys.stdin.readline().split())
graph[a].append((b,c))
def dijkstra(start):
visited[start] = True
distance[start] = 0
for neighbor in graph[start]:
distance[neighbor[0]] = neighbor[1]
for _ in range(n-1):
now = get_smallest_node()
visited[now] = True
for neighbor in graph[now]:
cost = distance[now] + neighbor[1]
if distance[now] + neighbor[1] < distance[neighbor[0]]:
distance[neighbor[0]] = cost
def get_smallest_node():
min_val = INF
for i in range(1, n+1):
if distance[i] < min_val and not visited[i]:
min_val = distance[i]
index = i
return index
dijkstra(start)
for i in range(1, n+1):
if distance[i] == INF:
print('INF')
else:
print(distance[i])
import sys
import heapq
INF = int(1e9)
n, m = map(int, sys.stdin.readline().split())
start = int(sys.stdin.readline().rstrip())
graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)
distance = [INF] * (n+1)
for _ in range(m):
a, b, c = map(int, sys.stdin.readline().split())
graph[a].append((b,c))
def Dijkstra(start):
q = []
distance[start] = 0
heapq.heappush(q, (0, start))
while q:
dist, cur = heapq.heappop(q)
if dist > distance[cur]:
continue
for neighbor in graph[cur]:
cost = dist + neighbor[1]
if cost < distance[neighbor[0]]:
distance[neighbor[0]] = cost
heapq.heappush(q, (cost, neighbor[0]))
for i in range(1, n+1):
if distance[i] == INF:
print('INF')
else:
print(distance[i])
Floyd-Warshall Algorithm
import sys
INF = int(1e9)
n = int(sys.stdin.readline().rstrip())
m = int(sys.stdin.readline().rstrip())
graph = [[INF]*(n+1) for _ in range(n+1)]
for a in range(1, n+1):
for b in range(1, n+1):
if a==b:
graph[a][b]=0
for _ in range(m):
a,b,c = map(int, input().split())
graph[a][b] = c
for k in range(1, n+1):
for a in range(1, n+1):
for b in range(1, n+1):
graph[a][b] = min(graph[a][b], graph[a][k]+graph[k][b])
for a in range(1, n+1):
for b in range(1, n+1):
if graph[a][b] == INF:
print(0, end=' ')
else:
print(graph[a][b], end=' ')
print()