자료구조와 알고리즘/이것이 취업을 위한 코딩테스트다

알고리즘 - DFS(Depth-First Search)

얄루몬 2021. 8. 20. 16:20

https://youtu.be/7C9RgOcvkvo?list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&t=1585

<DFS 동작예시>

- 무방향 그래프

- 그래프에서는 대부분 번호가 낮은 인접 노드부터 시작한다는 것이 많다.

 

1 -> 2 -> 7 -> (6 or 8)일 때 가장 깊은 6 -> 다른 노드가 없기 때문에 노드 6을 꺼내주면 된다. -> 8 -> 3 -> 4 -> 5

#DFS

def dfs(graph,v,visited):
    #현재 노드를 방문 처리
    visited[v] = True
    print(v,end=' ')

    #현재 노드와 연결된 다른 노드를 재귀적으로 방문
    for i in graph[v]:
        if not visited[i]:
            dfs(graph, i, visited)

# 각 노드가 연결된 정보를 표현 2차원 리스트
graph = [[],[2,3,8],[1,7],[1,4,5],[3,5],[3,4],[7],[2,6,8],[1,7]]
             #1번    2번     3번    4번   5번  6번  7번    8번

# 각 노드가 방문된 정보를 표현 (1차원 리스트) 인덱스 0 사용하지 않기 위해서 +1 해준 값으로!
visited = [False]*9 

dfs(graph,1,visited)

- 이때 그래프에 있는 것은 인접한 노드를 표현한 것입니다.

- [ ] 인덱스 0인 노드는 비워주고 인덱스가 1인 노드부터 시작해줍니다.

 

<노드 1과 인접한 노드들>

 

<노드 2와 인접한 노드들>

 

<노드 3과 인접한 노드들>

- 이런식으로 살펴보았을 떄 직접적으로 간선으로 이어져 있는 노드들만 인접한 노드로 그래프에 2차원 배열로 들어가게 됩니다. 이것을 유의하여 2차원 배열을 넣어주세요.