๋ฌธ์ ๐
์ค๋๋ ์์ค์ด๋ ๋๋น ์ฐ์ ํ์(BFS) ์์ ์กฐ๊ต๋ฅผ ํ๊ณ ์๋ค. ์๋น ๊ฐ ์์ ํ ๋ด์ฉ์ ํ์๋ค์ด ์ ์ดํดํ๋์ง ๋ฌธ์ ๋ฅผ ํตํด์ ํ์ธํด๋ณด์.
N๊ฐ์ ์ ์ ๊ณผ M๊ฐ์ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(undirected graph)๊ฐ ์ฃผ์ด์ง๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ์ด๊ณ ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 1์ด๋ค. ์ ์ R์์ ์์ํ์ฌ ๋๋น ์ฐ์ ํ์์ผ๋ก ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ ๋ ธ๋์ ๋ฐฉ๋ฌธ ์์๋ฅผ ์ถ๋ ฅํ์.
๋๋น ์ฐ์ ํ์ ์์ฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ธ์ ์ ์ ์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค.
bfs(V, E, R) { # V : ์ ์ ์งํฉ, E : ๊ฐ์ ์งํฉ, R : ์์ ์ ์
for each v ∈ V - {R}
visited[v] <- NO;
visited[R] <- YES; # ์์ ์ ์ R์ ๋ฐฉ๋ฌธ ํ๋ค๊ณ ํ์ํ๋ค.
enqueue(Q, R); # ํ ๋งจ ๋ค์ ์์ ์ ์ R์ ์ถ๊ฐํ๋ค.
while (Q ≠ ∅) {
u <- dequeue(Q); # ํ ๋งจ ์์ชฝ์ ์์๋ฅผ ์ญ์ ํ๋ค.
for each v ∈ E(u) # E(u) : ์ ์ u์ ์ธ์ ์ ์ ์งํฉ.(์ ์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค)
if (visited[v] = NO) then {
visited[v] <- YES; # ์ ์ v๋ฅผ ๋ฐฉ๋ฌธ ํ๋ค๊ณ ํ์ํ๋ค.
enqueue(Q, v); # ํ ๋งจ ๋ค์ ์ ์ v๋ฅผ ์ถ๊ฐํ๋ค.
}
}
}
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ์ N (5 ≤ N ≤ 100,000), ๊ฐ์ ์ ์ M (1 ≤ M ≤ 200,000), ์์ ์ ์ R (1 ≤ R ≤ N)์ด ์ฃผ์ด์ง๋ค.
๋ค์ M๊ฐ ์ค์ ๊ฐ์ ์ ๋ณด u v๊ฐ ์ฃผ์ด์ง๋ฉฐ ์ ์ u์ ์ ์ v์ ๊ฐ์ค์น 1์ธ ์๋ฐฉํฅ ๊ฐ์ ์ ๋ํ๋ธ๋ค. (1 ≤ u < v ≤ N, u ≠ v) ๋ชจ๋ ๊ฐ์ ์ (u, v) ์์ ๊ฐ์ ์๋ก ๋ค๋ฅด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ ์๋ฅผ ํ ๊ฐ์ฉ ์ถ๋ ฅํ๋ค. i๋ฒ์งธ ์ค์๋ ์ ์ i์ ๋ฐฉ๋ฌธ ์์๋ฅผ ์ถ๋ ฅํ๋ค. ์์ ์ ์ ์ ๋ฐฉ๋ฌธ ์์๋ 1์ด๋ค. ์์ ์ ์ ์์ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ 0์ ์ถ๋ ฅํ๋ค.
๋ด ํ๐ฆท
# 24444. ์๊ณ ๋ฆฌ์ฆ ์์
- ๋๋น ์ฐ์ ํ์1
from collections import deque # ์๊ฑฐ ์ํ๊ณ ๊ทธ๋ฅ stack์ผ๋ก ํ๋ฉด ์๋ฌ ๋์...
import sys
input = sys.stdin.readline
def bfs(R, V): # V: ์ ์ ๊ฐ์, E ๊ฐ์ , R : ์์ ์ ์
global visited
visited = [0] * (V+1)
q = deque([R]) # deque = deque() => ๋น์ด์๋ ํ ๋ง๋ค๊ธฐ
visited[R] = 1
order = 1 # ๋ช๋ฒ์งธ์ธ์ง ์๊ธฐ์ํด์ ์์๋ฅผ 1๋ก ์ด๊ธฐํํด์ฃผ๊ณ
while q:
t = q.popleft() # pop(0)
# num[t].sort()
for i in num[t]:
# for i in sorted(num[t]): #sorted๋ฅผ ์ธ๊บผ๋ฉด ์ด๋ ๊ฒ!!!
if visited[i] == 0:
q.append(i)
order += 1 # ์ฐพ์๋๋ง๋ค ์์๋ฅผ 1์ฉ ๋ํด์ค๋ค
visited[i] = order
N, M, R = map(int, input().split())
num = [[] for _ in range(N+1)]
for _ in range(M):
v1, v2 = map(int, input().split())
num[v1].append(v2)
num[v2].append(v1)
for k in num:
k.sort()
bfs(R, N)
for s in visited[1::]:
print(s)
๋ฌธ์ ํ๋ฉด์ ์ด๋ ค์ ๋ ์ ...
1. ์๊ฐ์ด๊ณผ => import collections import deque์ import sys๋ก ํด๊ฒฐ!!
- deque์ stack๊ณผ ๋ค๋ฅธ ์ ๋ค...
- deque = deque() => ๋น์ด ์๋ ํ ๋ง๋ค์ด์ฃผ๊ธฐ (stack์ q = [])
- popleft() => ์ ์ผ ์ฒซ ๊ฐ ๋นผ์ฃผ๊ธฐ (stack์ pop(0))
2. ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฝ์ ์ ๋ ฅ๋ฐ์๊ฒ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ (๋๋ ์ ๋ ฅ ๋ฐ์ ์ ๊ณ ๋๋ก ๋ง๋ค์ด์ ๊ณ์ ์ ๋ต์ด ์ ๋์๋ค...)
- num[t].sort()
- for i in sorted(num[t])
- for k in num: k.sort() .... ๋ฑ๋ฑ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค(์ด์ฐจ์ ๋ฐฐ์ด์ด๋ผ ์ฝ์ง์์..)
์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฐ๋ ๋ค โ๏ธ
1) BFS(๋๋น์ฐ์ ํ์)
: ๊ทธ๋ํ์ ํธ๋ฆฌ์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ.. ํ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉ
- ๋์๊ณผ์
- ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
- ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
- ํ๊ฐ ์์ด์ง ๋๊น์ง ๋ฐ๋ณต!!
def bfs(s, V): # ์์ ์ ์ s, ๋ง์ง๋ง ์ ์ V
# visited ์์ฑ => ์ด ์์ ๊ธฐ์ตํ๊ธฐ!!!!!
visited = [0] * (V + 1)
# ํ์์ฑ
q = [] # ์ด ํ์ด๋ฐ์ q = [s] ํด๋ ๋ฉ๋๋น
# ์์์ ์ธํ
q.append(s)
# ์์์ ๋ฐฉ๋ฌธ ํ์
visited[s] = 1
while q: # ํ์ ์ ์ ์ด ๋จ์์์ผ๋ฉด ๊ณ์ ์งํ... (front != rear ๋ผ๊ณ ๋ ์ฌ์ฉ๊ฐ๋ฅ!! ๊ฐ์ผ๋ฉด ๋น๊ฑฐ๋๊น
t = q.pop(0) # ๋ํ, ์์์ ๋ฝ์์ผ๊ฒ์ฅฌ
print(t) # ๋ฐฉ๋ฌธํ ์ ์ ์์ ํ ์ผ
# ์ธ์ ํ ์ ์ ์ค ์ธํ๋์ง ์์ ์ ์ w๊ฐ ์์ผ๋ฉด
for w in adj_l[t]:
if visited[w] == 0:
# w๋ฅผ ์ธํ, ์ธํ ๋์์์ ํ์
q.append(w)
# visited[w] = 1
visited[w] = visited[t] + 1 #### ์ต์๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ์ข์์ฉ ###
# print(visited[1:])
์ ํฌ ์ํ์ด import๋ฅผ ์ฌ์ฉํ ์ ๊ฐ ์์ด๊ฐ์ง๊ตฌ...
๋ฌธ์ ํ๋ deque๋ฅผ ์ฐ์ง ์์ ์์ํ๋ฐ์... ๋ฐํฌ ์ฐ๋ ๋ฒ์ ๐๐
from collections import deque
def bfs(start):
global graph, visited
queue = deque([start]) # ์์์ ์ ํ์ ๋ฃ์ด์ค๋๋ค
visited[start] = True # ๋ฐฉ๋ฌธ ํ์๋ฅผ ํด์ค๋๋ค
while queue: # ํ์ ๋จ์์๋ ๊ฐ์ด ์์ ๋๊น์ง ๋ฐ๋ณต!!
v = queue.popleft() # ํ์ ์ฒซ๋ฒ์งธ ๊ฐ์ ๋นผ์ต๋๋ค
print(v, end = '') # ์ด๋ค ๊ฒฝ๋ก๋ก ๋ฐฉ๋ฌธํ๋์ง ์ ์ด์ค๋๋ค
for i in graph[v]: # v์ ์ธ์ ํ ๊ณณ์ ๋๋ฉด์
if not visited[i]: # ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด
queue.append(i) # ํ์ ๋ฃ์ด์ฃผ๊ณ
visited[i] = True # ๋ฐฉ๋ฌธ ํ์๋ฅผ ํด์ค๋๋ค
bfs(1) # 1์ ๊ทธ๋ฅ ์์์ ์๋ฅผ 1๋ก ๋ ๊ฑฐ..
'algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 11651. ์ขํ ์ ๋ ฌํ๊ธฐ2 (sort & lambda) (0) | 2023.08.30 |
---|---|
๋ฐฑ์ค 1193. ๋ถ์ ์ฐพ๊ธฐ (1) | 2023.08.28 |
swea 4875. ๋ฏธ๋ก (์ฌ๋ฐฉํ์ & DFS) (0) | 2023.08.19 |
swea 4874. Forth (ํ์ ํ๊ธฐ๋ฒ ๊ณ์ฐํ๊ธฐ) (0) | 2023.08.19 |
๋ฐฑ์ค 1920. ์์ฐพ๊ธฐ (set(), Binary Search) (0) | 2023.08.15 |