문제 정보


풀이

문제

그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오.
단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다.
정점 번호는 1번부터 N번까지이다.

코드


from collections import deque
import sys
input = sys.stdin.readline
def DFS(v): #depth-first search
    visit2[v]=1
    print(v,end=' ')
    for i in range(1,N+1):
        if visit2[i]==0 and graph[v][i]==1:
            DFS(i)

def BFS(v): #breadth-first search
    q=deque()
    q.append(v)
    visit[v]=1
    while q:
        v=q.popleft()
        print(v,end=' ')
        for i in range(1,N+1):
            if visit[i]==0 and graph[v][i]==1:
                q.append(i)
                visit[i]=1



N,M,V = map(int,input().split()) #4,5,1
graph = [[0]*(N+1) for i in range(N+1)]
visit = [0]*(N+1)
visit2 = [0]*(N+1)
for i in range(M):
    a,b=map(int,input().split())
    graph[a][b]=graph[b][a]=1
DFS(V)
print()
BFS(V)

설명

BFS와 DFS를 단순 구현하는 문제입니다.
먼저 연결되어 있는 그래프를 구현할 표를 생성해서 연결되어 있을경우 1, 연결되어 있지 않을 경우 0을 넣고 이것을 활용합니다.
DFS는 recursive함수로, BFS는 queue를 활용하여 구현하였습니다.