Post

백준 24444,5번 너비 우선탐색-1,2

백준 24444,5번 너비 우선탐색-1,2

너비 우선 탐색문제는 깊이 우선탐색과 다르게 가로로 먼저 움직이는것이다 기준 노드에서 가장 얕은 노드부터 가장 깊은 노드로 탐색 하는 방법이다

너비우선 탐색은 시작점에서 가까운것을 기준으로 탐색하기 때문에 최단경로를 찾을 때 유용하다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from collections import deque
import sys
input = sys.stdin.readline

n,m,r = map(int,input().split())
link = [[] for _ in range(n+1)]
ans = [0]*(n+1)
cur = 1
ans[r] = cur #초기정점에 1을 넣음
q = deque([r]) #큐에 탐색의 순서를 넣음

for _ in range(m): #간선 정보 입력
    a,b = map(int,input().split())
    link[a].append(b)
    link[b].append(a)

for lst in link:
    lst.sort()

while q:
    v = q.popleft()
    for i in link[v]:
        if ans[i]:
            continue
        cur += 1
        ans[i] = cur
        q.append(i)

for i in ans[1:]:
    print(i)

 

24445번

위문제와 동일한 문제인데 탐색 방법을 오름차순에서 내림차순으로 변경한게 끝이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from collections import deque
import sys
input = sys.stdin.readline

n,m,r = map(int,input().split())
link = [[] for _ in range(n+1)]
ans = [0]*(n+1)
cur = 1
ans[r] = cur #초기정점에 1을 넣음
q = deque([r]) #큐에 탐색의 순서를 넣음

for _ in range(m): #간선 정보 입력
    a,b = map(int,input().split())
    link[a].append(b)
    link[b].append(a)

for lst in link:
    lst.sort(reverse=True) #내림차순으로 변경

while q:
    v = q.popleft()
    for i in link[v]:
        if ans[i]:
            continue
        cur += 1
        ans[i] = cur
        q.append(i)

for i in ans[1:]:
    print(i)
This post is licensed under CC BY 4.0 by the author.