BOJ : DFS와 BFS [1260]

재현·2021년 3월 21일
0

1. 문제


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

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

2. 아이디어


  • BFS, DFS 개념 코드 응용
    • 연결되어 있는 노드들을 문제에서 요구하는 입력으로 바꾼 후 개념 적용

3. 코드


mine

from collections import deque

def dfs(graph, v, visited):
  # 현재 노드를 방문 처리
  visited[v] = True
  print(v, end=' ')
  # 현재 노드와 연결된 다른 노드를 재귀적으로 방문
  for i in graph[v]:
    if not visited[i]:
      dfs(graph, i, visited)

def bfs(graph, start, visited):
  # 큐 구현을 위해 deque 라이브러리 사용
  queue = deque([start])
  # 현재 노드 방문 처리
  visited[start] = True
  # 큐가 빌 때까지 반복
  while queue:
    # 큐에서 하나의 원소를 뽑아 출력하기
    v = queue.popleft()
    print(v, end= ' ')
    # 아직 방문하지 않은 인접한 원소들을 큐에 삽입
    for i in graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True

n, m, v = map(int, input().split())
graph = [[] for _ in range(n+1)]

for _ in range(m):
    x,y=map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

for g in graph:
    g.sort()

visited=[False]*(n+1)
dfs(graph, v, visited)
print()
visited=[False]*(n+1)
bfs(graph, v, visited)

개념 설명 및 기본 코드 출처 : https://www.youtube.com/watch?v=PqzyFDUnbrY
profile
성장형 프로그래머

0개의 댓글