# import sys
# sys.stdin = open("input.txt", "r")
from collections import deque
# DFS
def DFS(now):
global N
print(now, end=' ')
for next in range(1, N+1):
if next not in adj[now]: continue
if visited[next] == 1: continue
visited[next] = 1
DFS(next)
# BFS
def BFS(s):
global N
q = deque()
q.append(s)
while q:
now = q.popleft()
print(now, end=' ')
for next in range(1, N+1):
if next not in adj[now]: continue
if visited[next] == 1: continue
visited[next] = 1
q.append(next)
N, M, V = map(int, input().split())
adj = [[] for _ in range(N+1)]
for i in range(M):
n1, n2 = map(int, input().split())
adj[n1].append(n2)
adj[n2].append(n1)
visited = [0] * (N+1)
visited[V] = 1
de = -1
DFS(V)
print()
visited = [0] * (N+1)
visited[V] = 1
de = -1
BFS(V)
코드트리 알고리즘으로 기초를 다시 정리하고 나서 알고리즘 문제에 다시 도전해보기로 했다!
BFS와 DFS 방법론만 알고 있으면 쉽게 풀 수 있는 문제고, 처음에 adj라는 2차원 배열을 전부 0으로 먼저 넣어놓는 방식을 생각했다가, 필요한 값만 각 행에 넣어버리는 방법으로 바꾸었다.(이게 메모리를 덜 차지하는 방법일 듯)
SWEA A형을 목표로 앞으로 열심히 해보자!!
'개발 공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 10926 ??!, 18108 1998년생인 내가 태국에서는 2541년생?!, 10430 나머지 (0) | 2022.07.11 |
---|---|
[백준] 1000 A+B, 1008 A/B (0) | 2022.07.11 |
[백준] 10172. 개 (0) | 2022.07.11 |
[백준] 10171. 고양이 (0) | 2022.07.09 |
[SW expert] #12543. 부분집합의 합2 (0) | 2022.07.04 |