문제링크 : 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)
이게 마지막으로 내가 제출하게 된 코드이며 알고리즘을 공부 하면 할 수록 기본기가 많이 부족하며 더 다양한 문제들을 많이 풀어봐야겠다고 느꼈다.
감사합니답 많이 도움됐습니다ㅏ