๋ฌธ์
ํ์ด
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋, ์ต๋จ๊ฒฝ๋ก ๊ฐ์ด ๊ฐฑ์ ๋ ๋ ๊ทธ๋์ ๋ ธ๋ ๊ฐ๋ ํจ๊ป ๊ธฐ๋กํ๋ค.
์์ ๋ ธ๋๊ฐ 1๋ฒ ์ผ ๋,
1. ์ด๊ธฐ๊ฐ
distance : 1๋ฒ ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ ์ ์๋ ์ต๋จ ๊ฒฝ๋ก
1 | 2 | 3 | 4 | 5 | 6 |
0 | 4 | 2 | INF | INF | INF |
nearnest ๊ฐ : ๋ฐฉ๋ฌธํ ๋ ธ๋({1}) ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋
1 | 2 | 3 | 4 | 5 | 6 |
1 | 1 | 1 | 1 | 1 | 1 |
2. ๊ฐฑ์
distance : 1๋ฒ ๋ ธ๋์์ n๋ฒ ๋ ธ๋๋ก ๊ฐ๋ ๋น์ฉ๋ณด๋ค 1~3, 3~n์ผ๋ก ๊ฐ๋ ๋น์ฉ์ด ๋ ์์ผ๋ฉด ๊ฐฑ์
1 | 2 | 3 | 4 | 5 | 6 |
0 | 4 | 2 | INF | 6 (๊ฐฑ์ ) | INF |
nearnest ๊ฐ : ๋ฐฉ๋ฌธํ ๋ ธ๋({1, 3}) ์ค์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋
1 | 2 | 3 | 4 | 5 | 6 |
1 | 1 | 1 | 1 | 3 (๊ฐฑ์ ) | 1 |
3. 2๋ฒ ๋ฐ๋ณต
๋ฌธ์ ์์ ์ฃผ์ด์ง ๋์ฐฉ ๋ ธ๋๊ฐ 5๋ผ๊ณ ํ๋ฉด
5์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ๊ตฌํ๊ณ , ๊ทธ ๋ ธ๋์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์
์์ ๋ ธ๋๊ฐ ๋์ฌ ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋ค. ์ด ๊ณผ์ ์ ์ญ์ผ๋ก ํ๋ฉด ์ต๋จ ๊ฒฝ๋ก.
์ฝ๋
import sys, heapq
input = sys.stdin.readline
n = int(input())
m = int(input())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b, c = map(int, input().split())
graph[a].append((b, c))
start, end = map(int, input().split())
# ๊ฐ์ฅ ๊ฐ๊น์ด ๋
ธ๋๋ฅผ ๊ธฐ๋ก
nearnest = [start] * (n + 1)
distance = [1e9] * (n + 1)
q = [(0, start)]
while q:
dist, now = heapq.heappop(q)
if dist > distance[now]:
continue
for next, nextDist in graph[now]:
cost = nextDist + dist
if cost < distance[next]:
distance[next], nearnest[next] = cost, now
heapq.heappush(q, (cost, next))
ans = []
tmp = end
while tmp != start:
ans.append(str(tmp))
tmp = nearnest[tmp]
ans.append(str(start))
ans.reverse()
print(distance[end])
print(len(ans))
print(" ".join(ans))
๋ง๋ฌด๋ฆฌ
ํ๊ต ์๊ณ ๋ฆฌ์ฆ ์์ ์์ ํ๋ ๊ณผ์ ๋ผ ์ฝ๊ฒ ํ ์ ์์๋ค ใ ใ