bfs 예제

그래프의 너비 첫 번째 순회(또는 검색)는 트리의 너비 첫 번째 순회와 유사합니다(이 게시물의 방법 2 참조). 여기서 유일한 캐치는 나무와 달리 그래프에 주기가 포함될 수 있으므로 동일한 노드에 다시 올 수 있습니다. 노드를 두 번 이상 처리하지 않으려면 부울 방문 배열을 사용합니다. 간단히 하기 위해 모든 정점이 시작 정점에서 연결할 수 있다고 가정합니다. 예를 들어 다음 그래프에서는 정점 2에서 통과를 시작합니다. 정점 0에 도달하면 인접한 모든 정점을 찾습니다. 도 2는 인접한 정점 0입니다. 방문한 정점을 표시하지 않으면 2가 다시 처리되고 종료되지 않는 프로세스가 됩니다. 다음 그래프의 너비 첫 번째 순회는 2, 0, 3, 1입니다. BFS 그래프 통과를 이해하기 위해 여기에 표시된 방향이 없는 그래프라는 단일 예제를 살펴보겠습니다. 위의 코드는 지정된 소스 정점에서 연결할 수 있는 정점만 트래버스합니다.

지정된 정점(예: 연결이 끊긴 그래프)에서 모든 정점에 연결할 수 없습니다. 모든 정점을 인쇄하려면 BFS 함수를 수정하여 모든 노드에서 하나씩 씩씩하게 시작하여 (DFS 수정 버전과 유사) 할 수 있습니다. 이 다섯 단계는 그래프의 모든 노드에 대해 계속 반복되며 대기열에 체크 인할 노드가 더 이상 남아 있지 않습니다. 물론 이러한 단계를 작성하는 것은 BFS의 예를 보는 것만큼 강력하지 는 않으므로 예제 그래프를 사용하여 검색의 “상위” 노드b로 시작하여 광범위한 첫 번째 검색을 실행해 보겠습니다. 너비 우선 검색을 사용하여 일련의 선택으로 인해 승패 상태가 발생하는 게임을 해결할 수 있습니다. 예를 들어, BFS는 플레이어가 루빅스 큐브를 해결하기 위한 동작의 승리 순서를 결정하는 데 도움이 될 수 있습니다. 예를 들어, 큐에 노드 b를 추가하고 실제로 방문하는 첫 번째 단계를 수행해 보겠습니다. 이 모든 것이 어떤 관련이 있을까요? 너비 우선 검색은 소위 너비 첫 번째 트리를 생성합니다. 다음 예제에서는 너비 첫 번째 트리의 모양을 볼 수 있습니다. 각 정점의 상위 특성은 예를 들어 BFS가 실행되고 선행 노드가 설정된 후 대상 노드에서 시작 노드까지 역추적하여 가장 짧은 경로의 노드에 액세스하는 데 유용합니다. 예를 들어 노드 h는 수준 3 노드이며 상위 노드 인 노드 b로 돌아가기 위해 따를 수있는 3 개의 가장자리 / 포인터가 있습니다. 또한 3단계보다 훨씬 긴 노드 h에서 b로의 경로가 있거나 노드 h에서 b로 의 여러 3단계 “짧은 경로”가 있을 수 있습니다.

중요한 것은 우리가 BFS 그래프 통과를 통해 역추적하고 발견 한 것을 통해 쉽게 접근 할 수있는 가장 짧은 경로 중 적어도 하나를 가지고 있다는 것입니다. 다음은 프랑크푸르트에서 시작하는 독일 도시에서 BFS를 실행하여 얻은 폭 우선 나무의 예입니다: 이것은 컴퓨터 과학 문제에서 상당히 일반적인 거대한 그래프에 특히 유용합니다. 예를 들어 여기에 설명된 이미지에서 많은 노드와 여러 수준이 있을 수 있으며 수준 0에서 마지막 수준까지 얼마나 많은 단계를 얻을 수 있는지 알고 싶을 수 있습니다. 이 그래프에서 가장 짧은 경로에 쉽게 액세스할 수 있으면 이 문제를 해결하는 데 매우 유용합니다. 예를 들어, 정점 e에는 인접한 노드가 하나뿐이므로, 따라서 정점 e에 대한 인접 링크된 목록에는 노드가 살아 있는 배열의 인덱스 0에 대한 참조가 포함되어 있습니다. 이 인접 성 목록을 빠르게 살펴보면 해당 인접 목록이 다루어왔던 그래프와 동일한 그래프에 직접 매핑되는 것을 볼 수 있습니다. 위의 예에서와 같이 BFS 알고리즘은 A에서 B에서 E에서 F로, 먼저 C와 G를 D로 트래버스합니다. 다음 규칙을 사용합니다. 그래프 통과는 그래프의 모든 정점으로 시작할 수 있으므로 임의로 하나를 선택합니다.

© 2020 A MarketPress.com Theme