⚡️algorithm

[DFS, BFS] 백준 1260. DFS와 BFS

남남이루 2022. 5. 2. 08:31

깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)

BFS 코드의 프레임 특징

from collections import deque

...

def BFS(v):

    q = deque()

    q.append(v)

    while q:

        p = q.popleft()

        print(p)

 

 

from collections import deque
import sys
sys.stdin = open('C:\\tech\\backjoon\\graph\\input3.txt','r')
input = sys.stdin.readline

res = []
def DFS(node):
    visit1[node] = 1
    line = graph[node]
    for i in range(1,n+1):
        if line[i] == 1 and visit1[i] == 0:
            if i not in res:
                res.append(i)
            DFS(i)

def BFS(node):
    q = deque()
    q.append(node)
    visit2[node] = 1
    while q:
        v = q.popleft()
        print(v, end = ' ')
        for i in range(1, n+1):
            if visit2[i] == 0 and graph[v][i] == 1:
                q.append(i)
                visit2[i] = 1


n,m,v = map(int, input().split())
# g = [[map(int, input().split())] for _ in range())]

graph = [[0]*(n+1) for _ in range(n+1)]
visit1 = [0]*(n+1)
visit2 = [0]*(n+1)

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

res.append(v)
DFS(v)
for r in res:
    print(r, end = ' ')
print()
BFS(v)

 

 

* Brute-force 탐색

BFS랑 같은 건 줄 알았는데, 전혀 아니다. Brute Force는 무자비하게 전부 탐색하는 방식으로, 값을 구하기 위해 하나씩 다 대입해보는 것이다.