You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
test_case = 0
INF = int(1e9)
def get_smallest():
minV = INF
x = y = 0
for i in range(N):
for j in range(N):
if not visited[i][j] and minV > distance[i][j]:
minV = distance[i][j]
x = i
y = j
return x, y
def dijkstra(x, y):
distance[x][y+1] = distance[x][y] + cave[x][y+1]
distance[x+1][y] = distance[x][y] + cave[x+1][y]
for _ in range(N * N - 1):
node = get_smallest()
visited[node[0]][node[1]] = True
for d_x, d_y in ((1, 0), (-1, 0), (0, 1), (0, -1)):
n_x = node[0] + d_x
n_y = node[1] + d_y
if 0 <= n_x < N and 0 <= n_y < N and not visited[n_x][n_y]:
new_dist = distance[node[0]][node[1]] + cave[n_x][n_y]
if distance[n_x][n_y] > new_dist :
distance[n_x][n_y] = new_dist
return distance[-1][-1]
while True:
test_case += 1
N = int(input())
if N == 0:
break
cave = [list(map(int, input().split())) for _ in range(N)]
distance = [[INF] * N for _ in range(N)]
visited = [[False] * N for _ in range(N)]
visited[0][0] = True
distance[0][0] = cave[0][0]
print(f"Problem {test_case}: {dijkstra(0, 0)}")
'''
input
3 3
1 2 3
2 3 4
3 1 -8
'''
INF = int(1e9)
def bellman_ford(start):
distance = [INF] * (V + 1)
distance[start] = 0
# νλ²λ λ°λ³΅νμ¬ κ°μ λ³ν μ 무μ λ°λΌ μμ μΈμ΄ν΄μΈμ§ νμΈ
for i in range(V):
for s, e, w in edges:
if distance[s] != INF and distance[e] > distance[s] + w:
if i == V - 1:
return distance
distance[e] = distance[s] + w
return distance
V, E = map(int, input().split()) # N = node, M = edge
edges= []
for _ in range(E):
s, e, w = map(int, input().split())
edges.append((s, e, w))
res = bellman_ford(1)
print(res)
# [1000000000, -2, 2, 6]