728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ๐Ÿ˜‚

์˜ค๋Š˜๋„ ์„œ์ค€์ด๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(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๋กœ ๋“ ๊ฑฐ..
728x90
๋ฐ˜์‘ํ˜•

+ Recent posts