본문 바로가기
Problem Solving/Python

[백준]BOJ 1260 - DFS와 BFS - Python/BFS, DFS

by jw_choi 2022. 11. 6.

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

<문제>

 

<풀이>

심플하다. 입력값으로 그래프가 주어지고, 우리는 DFS와 BFS를 이용해 탐색한 결과를 각각 출력하면 된다.

 

<코드>

from collections import deque

def dfs(v, dfsArray):
    isVisitedDFS[v] = True
    dfsArray.append(v)
    for i in range(len(graph[v])):
        if graph[v][i] != 0 and isVisitedDFS[i] == False:
            dfs(i, dfsArray)

def bfs(v, bfsArray):
    QueueBFS = deque()
    isVisitedBFS[v] = True
    QueueBFS.append(v)
    while len(QueueBFS) != 0:
        node = QueueBFS.popleft()
        bfsArray.append(node)
        for i in range(len(graph[node])):
            if graph[node][i] != 0 and not isVisitedBFS[i]
                QueueBFS.append(i)
                isVisitedBFS[i] = True

n, m, v = map(int, input().split())
graph = [[0] * (n + 1) for i in range(n + 1)]
isVisitedDFS = [False for i in range(n + 1)]
isVisitedBFS = [False for i in range(n + 1)]
dfsArray = []
bfsArray = []

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

dfs(v, dfsArray)
bfs(v, bfsArray)

for node in dfsArray:
    print(node, end=" ")
print()
for node in bfsArray:
    print(node, end=" ")
print()

댓글