๊ด€๋ฆฌ ๋ฉ”๋‰ด

CS Student’s SAP&Tech Journey๐Ÿ’ซ

[๋ฐฑ์ค€] 24444๋ฒˆ: ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰1 / ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰ BFS ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ | ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | ์†Œํ”„ํ‹ฐ์–ด

[๋ฐฑ์ค€] 24444๋ฒˆ: ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰1 / ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰ BFS

์ธํฌ๋งˆํ‹ฑ 2024. 11. 5. 17:11

99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋”” 4์ผ

1. ๋ฐฑ์ค€ 24444๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… -  ๋„ˆ๋น„ ์šฐ์„ ํƒ์ƒ‰ 1

[๋ฐฑ์ค€] 24444๋ฒˆ: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๋„ˆ๋น„ ์šฐ์„ ํƒ์ƒ‰

 

 

2. ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 

0. ๋ฌธ์ œ ๋ถ„์„

N๊ฐœ์˜ ์ •์ ๊ณผ M๊ฐœ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ์ด๊ณ  ๋ชจ๋“  ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๋Š” 1์ด๋‹ค. ์ •์  R์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๊ฒฝ์šฐ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜์ž.

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ธ์ ‘ ์ •์ ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค.

 

: ์ธ์ ‘ ์ •์ ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธ์‹œ์ผœ์•ผํ•˜๋ฏ€๋กœ ์ •๋ ฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

1. ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ์ˆ˜ 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) ์Œ์˜ ๊ฐ’์€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

 

: ์–‘๋ฐฉํ–ฅ ๊ฐ„์„ ์ž„์„ ํ™•์ธํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

2. ์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ •์ˆ˜๋ฅผ ํ•œ ๊ฐœ์”ฉ ์ถœ๋ ฅํ•œ๋‹ค. i๋ฒˆ์งธ ์ค„์—๋Š” ์ •์  i์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์‹œ์ž‘ ์ •์ ์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋Š” 1์ด๋‹ค. ์‹œ์ž‘ ์ •์ ์—์„œ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

: ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋…ธ๋“œ i์˜ ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

3. ๋ฌธ์ œ ์ ‘๊ทผ

๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰ BFS๋ฅผ ํ•™์Šตํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

queue ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•ด์•ผ ํ•œ๋‹ค.

 

์‹œ๊ฐ„์ดˆ๊ณผ๋ฌธ์ œ

input = sys.stdin.readline

 

์–‘๋ฐฉํ–ฅ ๊ฐ„์„ 

์–‘๋ฐฉํ–ฅ ๊ฐ„์„ ์ด๋ผ๋Š”๊ฑด ์ •์ ‘ u์™€ ์ •์  v๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

 

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ„์„  ์ž…๋ ฅ 1 4๋ฅผ ์ค€๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

graph๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ graph[1]์€ ์ •์  1๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•˜๊ณ , graph[4]๋Š” ์ •์  4์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ graph[1]์— 4๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  graph[4]์— 1์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

graph = [[] for_i in range(N+1)]

for i in range(M):
	a,b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

 

์˜ค๋ฆ„์ฐจ์ˆœ

while๋ฌธ ๋ฐ–์—์„œ graph๋ฅผ ์ •๋ ฌํ•ด์•ผ ๋ฐ˜๋ณต ์ •๋ ฌ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

for i in range(1, N + 1):
    graph[i].sort()

 

BFS ํ•จ์ˆ˜

1. ๊ฐ ๋…ธ๋“œ๋ฅผ ์ฒ˜์Œ์— 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ›„ visited์— ์ €์žฅํ•˜๊ณ  ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋Š” cnt = 1 ๊ฐ’์„ ์ค€๋‹ค. cnt๋Š” ๋ฐฉ๋ฌธ ์ˆœ์„œ์ด๋‹ค.

2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ํ›„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

3. queue๊ฐ€ ๋น„๊ฒŒ ๋˜๋ฉด while๋ฌธ์ด ์ข…๋ฃŒ๋œ๋‹ค.

from collections import deque
import sys
input = sys.stdin.readline

N,M,start = map(int, input().split())
graph = [[]for _ in range(N+1)]
visited = [0]*(N+1)
cnt = 1
for i in range(M):
    a,b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)


for i in range(1, N + 1):
    graph[i].sort()

def bfs(graph, start, visited):
    # ์‹œ์ž‘ ๋…ธ๋“œ
    global cnt
    queue = deque([start])
    visited[start]= cnt

    while queue:
        v = queue.popleft()
        for i in graph[v]:
            if visited[i] == 0:
                cnt = cnt +1
                visited[i] = cnt
                queue.append(i)

bfs(graph,start,visited)

for i in range(1,N+1):
    print(visited[i])