์ต์ ์คํจ๋ ํธ๋ฆฌ๋ ์คํจ๋ ํธ๋ฆฌ์ค ๋ชจ๋ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ธ ํธ๋ฆฌ์ด๋ค. (ํ๋ฆผ, ํฌ๋ฃจ์ค์นผ)
1. ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ค์น๊ฐ ์ต์์ธ ๊ฐ์ ์ ํ๋์ฉ ์ ํํด ๋๊ฐ๋ ๊ฐ์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ฌ์ดํด์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋ํด์๋ ์์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
def find_parent(a): # ๋ถ๋ชจ์ฐพ๊ธฐ
if parent[a] == a:
return a
else:
parent[a] = find_parent(parent[a])
return parent[a]
def merge(a, b):
x = find_parent(a)
y = find_parent(b)
if x != y:
parent[x] = y
return True
return False
v, e = map(int, input().split())
parent = defaultdict(int)
for i in range(1, v + 1):
parent[i] = i
graph = []
for _ in range(e):
graph.append(list(map(int, input().split())))
graph.sort(key=lambda x: x[2])
total = 0
for u, v, w in graph:
if merge(u, v):
total += w
print(total)
2. ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ
-์ ์ ์ ํ๋ ์ ํํ ํ, ์ ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ค ๊ฐ์ฅ ๊ฐ์ค์น ๊ฐ ์์ ๊ฐ์ ์ ์ ํํด์ ์ฐ๊ฒฐํด ๋๊ฐ๋ ์ ์ ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ ์ ์ ํ๋์ฉ ์ ํํด๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด์ ์๋์ผ๋ก ๊ณ ๋ ค๊ฐ ๋๋ค. (visit)
def prim(tree,start):
queue = []
visit = defaultdict(lambda : False)
heapq.heappush(queue,(0,start)) # ๋น์ฉ, ๋
ธ๋
sum = 0
while queue:
weight, node = heapq.heappop(queue)
if visit[node]: #ํ์ ๊ฐ์ ๋
ธ๋๊ฐ ์ฌ๋ฌ๋ฒ ๋ค์ด๊ฐ์์ ์ ์์ผ๋ฏ๋ก ํ๋ฒ ๋ ์ฒดํฌ ํ์
continue
else :
visit[node] = True
sum += weight
for nextV in tree[node]: # ๋ค์๋
ธ๋, ๋น์ฉ
if not visit[nextV[0]]:
heapq.heappush(queue,(nextV[1],nextV[0]))
return sum
3. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ (์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ)
-ํ๋์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
def dijkstra(edges,K):
queue = []
distance = defaultdict(lambda :INF)
found = defaultdict(lambda : False)
heapq.heappush(queue,(0,K))
distance[K]= 0
while queue:
v = heapq.heappop(queue)
found[v[1]] = True
for nextV in edges[v[1]]:
node = nextV[0]
cost = nextV[1]
if distance[v[1]]+cost < distance[node] and not found[node]:
distance[node]= distance[v[1]] + cost
heapq.heappush(queue,(distance[node],node))
return distance
ํ๋ฆผ๊ณผ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ์ฒ์์ ํท๊ฐ๋ ธ์๋๋ฐ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ผ๊ณ ํ๋ฉด ๋ค์ต์คํธ๋ผ๋ ๋ชจ๋ ์ ์ ๊ณผ ์ ์ ์ด ์ต์ ๊ฐ์ค์น๋ก ์ฐ๊ฒฐ์ด ๋์ด์์ง๋ง ํ๋ฆผ์ ์๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ํ ํ๋ฆผ์ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋ค์ต์คํธ๋ผ๋ ๋ชจ๋ ์ ์ ์ ํ์ํ ํ์๊ฐ ์๋ค.
'ALGORITHM' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์์ ๋ ฌ (0) | 2021.05.20 |
---|---|
ํธ๋ฆฌ ๊น์ด ๊ตฌํ๋ ๋ฐฉ์ (0) | 2021.01.12 |
[BFS] ๋ฐฑ์ค 2178 ๋ฌธ์ ํ์ด (0) | 2020.10.26 |
[DFS/BFS] ๋ฐฑ์ค 1260 ๋ฌธ์ ํ์ด (0) | 2020.10.26 |
[์ด์งํ์] programmers ์ ๊ตญ ์ฌ์ฌ ๋ฌธ์ ํ์ด (0) | 2020.10.11 |