[백준] 1260번-(Python 파이썬) - Bfs, Dfs

Choe Dong Ho·2021년 5월 18일
2

백준(python)

목록 보기
1/47

문제링크 : https://www.acmicpc.net/problem/1260

알고리즘을 공부하기 시작한지 약 10일째
dfs(깊이 우선 탐색)와 bfs(넓이 우선 탐색)에 대해
감을 찾아가고 있는 중이다.

말로 설명하는 거보단 이미지로 보는게 훨씬 이해가 잘 될 것이다. 내가 공부를 하며 느낀건 보통 깊이 우선으로 탐색할땐 함수안에서 재귀를 해 찾아가는 경우가 많고 넓이 우선으로 탐색을 할땐 큐나 데크에 저장을 하고 반복을 돌며 찾아가는 경우가 많았다.
처음엔 다른사람의 코드를 보고 공부를 하였고 이해한 뒤엔 다시 안보고 풀고를 반복하였으며 나중엔 문제만 보고 바로 풀 수 있게 되었다.

from collections import deque
import sys
read = sys.stdin.readline

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

def dfs(v):
  visit_list2[v] = 1        
  print(v, end = " ")
  for i in range(1, n + 1):
    if visit_list2[i] == 0 and graph[v][i] == 1:
      dfs(i)

n, m, v = map(int, read().split())

graph = [[0] * (n + 1) for _ in range(n + 1)] 
visit_list = [0] * (n + 1)
visit_list2 = [0] * (n + 1)

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

dfs(v)
print()
bfs(v)

이게 마지막으로 내가 제출하게 된 코드이며 알고리즘을 공부 하면 할 수록 기본기가 많이 부족하며 더 다양한 문제들을 많이 풀어봐야겠다고 느꼈다.

profile
i'm studying Algorithm

1개의 댓글

comment-user-thumbnail
2022년 7월 27일

감사합니답 많이 도움됐습니다ㅏ

답글 달기