[백준 문제] 1260번 DFS와 BFS - DFS 풀이 (파이썬)
[백준 문제] 1260번 DFS와 BFS - DFS 풀이 (파이썬)
문제 풀이법
- DFS에서 작은 수(가장먼저찾은)의 길을 따라가되 왔던 길은 가지 않는 로직
# N : 정점 갯수, M : 간선 갯수, V : 시작 정점 번호
N, M, V = map(int, input().split())
# 0으로 왼쪽 위쪽을 둘러쌈(인덱스와 번호가 헷갈려서)
matrix = [[0] * (N + 1) for _ in range(N + 1)]
# 간선 갯수로 인접 행렬 만들기
for _ in range(M):
link = list(map(int, input().split()))
matrix[link[0]][link[1]] = 1
matrix[link[1]][link[0]] = 1
# 깊이 우선 탐색(Depth First Search)
# current_node : 시작 정점, row : 인접 행렬, foot_print : 발자취 리스트
def dfs(current_node, row, foot_prints) :
# 발자취 리스트에 쌓기
foot_prints += [current_node]
# 인접 행렬의 row에 있는 갯수만큼 for문 돌린다.
for search_node in range(len(row[current_node])):
# 인접 행렬에서 1(=True)거나 찾는 노드가 발자취 리스트에 없는 경우
# if 절이니까 찾으면 바로 넘어감
if row[current_node][search_node] and search_node not in foot_prints:
foot_prints = dfs(search_node, row, foot_prints)
return foot_prints
# *붙인 이유는 리스트 형태를 풀어주기 위함
print(*dfs(V, matrix, []))
4 5 1
1 2
1 3
1 4
2 4
3 4
1 2 4 3