백준 문제 링크
DFS와 BFS
- DFS는 앞만 보고 가는 방법, 다음에 갈 방향이 visited에 없으면 방향을 인자로 하는 함수를 다시 쓴다.(재귀함수로)
- BFS는 출발점을 기준으로 각 칸에 걸쳐 갈 수 있는 곳 먼저 가는 방법,
visited에 없으면 queue에 넣어준다.
from collections import deque
def bfs(v):
q = deque()
q.append(v)
visited[v] = 1
visit = []
while q:
v = q.popleft()
print(v, end = " ")
for i in range(1, N+1):
if visited[i] == 0 and graph[v][i] == 1:
q.append(i)
visited[i] = 1
def dfs(v):
visited2[v] = 1
print(v, end = " ")
for i in range(1, N+1):
if visited2[i] == 0 and graph[v][i] == 1:
dfs(i)
N,M,V = map(int, input().split())
graph = [[0] * (N+1) for _ in range(N+1)]
visited = [0] * (N+1)
visited2 = [0] * (N+1)
for _ in range(M):
x,y = map(int, input().split())
graph[x][y] = graph[y][x] = 1
dfs(V)
print()
bfs(V)
N,M,V = map(int, input().split())
graph = {i : [] for i in range(1, N+1)}
for _ in range(M):
x = list(map(int, input().split()))
graph[x[0]].append(x[1])
graph[x[1]].append(x[0])
graph[x[0]].sort()
graph[x[1]].sort
# dfs 방법
def dfs(v, visited = []):
visited.append(v)
for w in graph[v]:
if w not in visited:
visited = dfs(w, visited)
return visited
# bfs 방법
def bfs(v):
visited = [v]
queue = [v]
while queue:
x = queue.pop(0)
for w in graph[x]:
if w not in visited:
visited.append(w)
queue.append(w)
return visited
print(*dfs(V))
print(*bfs(V))
처음 제출을 2번째 코드로 했는데 예제는 통과했지만 제출에는 실패했다 ㅠㅠ
BFS,DFS가 어려운만큼 잘하시는 분들 코드를 보고 공부를 많이 해야할 것 같다.