[๋ฐฑ์ค] 11779 - ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ 2
๋ฌธ์
n(1≤n≤1,000)๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ m(1≤m≤100,000)๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์๊น์ง ๊ฐ๋๋ฐ ๋๋ ๋ฒ์ค ๋น์ฉ์ ์ต์ํ ์ํค๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด A๋ฒ์งธ ๋์์์ B๋ฒ์งธ ๋์ ๊น์ง ๊ฐ๋๋ฐ ๋๋ ์ต์๋น์ฉ๊ณผ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ํญ์ ์์์ ์์ ๋์ฐฉ์ ์ผ๋ก์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ n(1≤n≤1,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ m(1≤m≤100,000)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์
์งธ ์ค๋ถํฐ m+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์์๋ ๋์ฐฉ์ง์ ๋์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๊ณ ๋ ๊ทธ ๋ฒ์ค ๋น์ฉ์ด ์ฃผ์ด์ง๋ค. ๋ฒ์ค ๋น์ฉ์ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์์ ์ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ m+3์งธ ์ค์๋ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ๊ตฌ๊ฐ ์ถ๋ฐ์ ์ ๋์๋ฒํธ์ ๋์ฐฉ์ ์ ๋์๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค.
์์ ์ ๋ ฅ
5
8
1 2 2
1 3 3
1 4 1
1 5 10
2 4 2
3 4 1
3 5 1
4 5 3
1 5
์์ ์ถ๋ ฅ
4
3
1 3 5
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ ํ์ ์ธ ๋ค์ต์คํธ๋ผ๋ก ํด๊ฒฐํ๋ ๋ฌธ์ ์ด๋ค.
2024.08.18 - [๐ค์๊ณ ๋ฆฌ์ฆ] - [์๊ณ ๋ฆฌ์ฆ] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm)
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm)
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (Dijkstra Algorithm)๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํ ์ ์ ์์ ๋ชจ๋ ์ ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ํ์ ๊ณผ์ [step 1] ์ถ๋ฐ ๋ ธ๋์ ๋์ฐฉ
yobi-devlog.tistory.com
๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ์ด๋ํ ๋์ ๊ฒฝ๋ก๊ฐ ํ์ ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก ๋ณ์๋ฅผ ํ ๋นํ์๋ค.
ํด๋น ๋ ธ๋๋ก์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐฑ์ ๋๋ฉด ๊ฑฐ์ณ๊ฐ ๋ ธ๋ ๋ํ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ์๋ค.
import sys
import heapq
import copy
INF = int(1e9)
n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
distance = [INF] * (n+1)
# ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฐ์ด
visited_count = [[] for _ in range(n+1)]
for _ in range(m):
a,b,c = map(int,sys.stdin.readline().split())
graph[a].append((c,b))
queue = []
s,e = map(int,input().split())
def dijkstra(start):
heapq.heappush(queue, (0, start))
distance[start] = 0
visited_count[start].append(start)
while queue:
dist, current = heapq.heappop(queue)
if distance[current] < dist:
continue
for node in graph[current]:
cost = dist + node[0]
if distance[node[1]] > cost:
distance[node[1]] = cost
heapq.heappush(queue, (cost, node[1]))
# ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด์ ๋
ธ๋์ ๊ฒฝ๋ก + ์
๋ฐ์ดํธ ํ ๋
ธ๋๋ก ์
๋ฐ์ดํธ
visited_count[node[1]] = copy.deepcopy(visited_count[current])
visited_count[node[1]].append(node[1])
dijkstra(s)
print(distance[e])
print(len(visited_count[e]))
for i in visited_count[e]:
print(i, end = " ")
์ ์ถ ๊ฒฐ๊ณผ
'๐์ฝ๋ฉํ ์คํธ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2206 - ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (Python) (0) | 2024.08.21 |
---|---|
[๋ฐฑ์ค] 9663 - N Queen (Python) (0) | 2024.08.20 |
[๋ฐฑ์ค] 1916 - ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ (Python) (0) | 2024.08.19 |
[๋ฐฑ์ค] 11404 - ํ๋ก์ด๋ (Python) (0) | 2024.08.19 |
[๋ฐฑ์ค] 1504- ํน์ ํ ์ต๋จ ๊ฒฝ๋ก (Python) (0) | 2024.08.19 |