[백준/Python] 1260번 DFS와 BFS 풀이
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1260번 DFS와 BFS
- 제출 언어: Python
풀이
문제
그래프를 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를 활용하여 구현하였습니다.