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

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

[ํŒŒ์ด์ฌ] 24479๋ฒˆ: ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰1 / ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ DFS ๋ณธ๋ฌธ

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

[ํŒŒ์ด์ฌ] 24479๋ฒˆ: ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰1 / ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰ DFS

์ธํฌ๋งˆํ‹ฑ 2024. 10. 31. 18:15

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

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

 

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. ๋ฌธ์ œ ์ ‘๊ทผ

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

์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด DFSํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•ด๊ฐ„๋‹ค.

 

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

input = sys.stdin.readline

 

์žฌ๊ท€ํ•จ์ˆ˜ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ

Python์˜ ๊ธฐ๋ณธ ์žฌ๊ท€ ์ œํ•œ์€ ์•ฝ 1000 ์ •๋„๋กœ, sys.setrecursionlimit์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํฐ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

import sys
sys.setrecursionlimit(150000)

 

DFS ํ•จ์ˆ˜

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

     ์•„์ง ๋ฐฉ๋ฌธ์•ˆํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋ฉด(visited๊ฐ€ 0์ธ๊ฒƒ) cnt๋ฅผ ๋Š˜๋ ค ๊ทธ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

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

import sys
sys.setrecursionlimit(150000)
input = sys.stdin.readline

N,M,v = map(int, input().split())
visited = [0]*(N+1)
graph = [[] for _ in range(N + 1)]
cnt = 1

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

def dfs(v):
    global cnt
    visited[v]= cnt
    graph[v].sort()
    for i in graph[v]:
        if visited[i]==0:
            cnt = cnt+1
            dfs(i)

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