λ¬Έμ π
μ€λλ μμ€μ΄λ λλΉ μ°μ νμ(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 |