[백준 문제] 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




© 2018. by statssy

Powered by statssy