Fully Responsive Theme
Resize your Browser to see the Effect
Parallax Effect
Scroll and Notice the Header Image

c++ dfs 예제

위의 코드는 지정된 소스 정점에서 연결할 수 있는 정점만 트래버스합니다. 지정된 정점(예: 연결이 끊긴 그래프)에서 모든 정점에 연결할 수 없습니다. 이러한 그래프의 완전한 DFS 통과를 수행하려면 모든 정점마다 DFSUtil()을 호출해야 합니다. 또한 DFSUtil()을 호출하기 전에 DFSUtil()의 다른 호출에 의해 이미 인쇄되었는지 확인해야 합니다. 다음 구현은 노드에 연결할 수 없는 경우에도 전체 그래프 통과를 수행합니다. 위의 코드의 차이점은 아래 코드에서 강조 표시됩니다. 예를 들어 노드 A에서 시작하여 아래 방향 그래프를 검색할 때 순회 시퀀스는 A B B B A A 또는 A C C A B A(A에서 B 또는 C를 처음 방문하는 것을 선택하는 것은 알고리즘에 달려 있음)입니다. 노드에 대한 역추적 의 형태로 반복 방문하여 아직 방문하지 않은 이웃이 있는지 확인합니다(없음이 없는 것으로 확인되더라도). 따라서 가능한 예약 주문은 A B C 및 A C D B이며, 가능한 후주문은 D B C A 및 D C B A이며, 가능한 역 후주문은 A B B D 및 A B C D입니다. 예를 들어, 아래 그래프의 DFS는 “0 3 4 2 1”, 다른 가능한 DFS는 “0 2 1 3 4″입니다.

다이어그램에 제공된 예제를 고려하십시오. 그래프 G는 연결이 끊긴 그래프이며 다음과 같은 3개의 연결된 구성 요소가 있습니다. 예를 들어 다음 그래프에서는 정점 2에서 통과를 시작합니다. 정점 0에 도달하면 인접한 모든 정점을 찾습니다. 도 2는 인접한 정점 0입니다. 방문한 정점을 표시하지 않으면 2가 다시 처리되고 종료되지 않는 프로세스가 됩니다. 다음 그래프의 깊이 첫 번째 순회는 2, 0, 1, 3입니다. DFS의 이 두 가지 변형은 서로 반대 순서로 각 정점의 이웃을 방문합니다: 재귀 변화에 의해 방문한 v의 첫 번째 이웃은 인접 한 가장자리 목록에서 첫 번째 인접 한 이웃이며 반복 적 변형에서 첫 번째 방문한 이웃은 인접 한 가장자리 목록에서 마지막 하나. 재귀 구현은 다음 순서로 예제 그래프에서 노드를 방문합니다: A, B, D, F, E, C, G. 비재귀 구현은 노드를 방문합니다: A, E, F, B, D, C, G. 위의 구현은 도달할 수 있는 정점만 인쇄합니다. 지정된 정점에서.

예를 들어 가장자리를 0-3 및 0-2로 제거하면 위의 프로그램은 0만 인쇄합니다. 그래프의 모든 정점을 인쇄하려면 모든 정점마다 DFS를 호출해야 합니다. 다음은 동일한 구현입니다. 역방향 주문은 방향이 지시된 비순환 그래프의 위상 분류를 생성합니다. 이 순서는 종종 제어 흐름의 자연 선형화를 나타내기 때문에 제어 흐름 해석에도 유용합니다. 위의 그래프는 아래 코드 조각의 제어 흐름을 나타낼 수 있으며 이 코드를 A B C D 또는 A C B D 순서로 고려하는 것이 당연하지만 A B C 또는 A C B B. DFS 순서를 사용하는 것은 자연스러운 것이 아닙니다. 을 사용하여 그래프 노드 샘플을 수집합니다. 그러나 불완전한 DFS는 불완전한 BFS와 마찬가지로 높은 수준의 노드쪽으로 편향됩니다.

그래프의 깊이 첫 번째 순회(또는 검색)는 트리의 깊이 첫 번째 순회와 유사합니다. 여기서 유일한 캐치는 나무와 달리 그래프에 주기가 포함될 수 있으므로 동일한 노드에 다시 올 수 있습니다. 노드를 두 번 이상 처리하지 않으려면 부울 방문 배열을 사용합니다. 그래프가 연결되지 않은 경우, 즉 두 개의 노드가 그래프에 존재하여 해당 노드 사이에 가장자리가 없는 경우 그래프의 연결이 끊어진다고 합니다. 무방향 그래프에서 연결된 구성 요소는 패스별로 서로 연결된 그래프의 정점 집합입니다. . 시간 복잡성 $$O (V +E)$, 인접 목록을 사용 하 여 구현 하는 경우. 깊이 우선 검색(DFS)은 트리 또는 그래프 데이터 구조를 트래버스 또는 검색하기 위한 알고리즘입니다.

This entry was posted in Uncategorized.