스택큐힙리스트

BFS로 찾은 실제 경로를 어떻게 찾을 수 있을까요? 본문

카테고리 없음

BFS로 찾은 실제 경로를 어떻게 찾을 수 있을까요?

스택큐힙리스트 2023. 12. 21. 06:28
반응형

내가 해결하려고 하는 문제는 MRT 시스템의 트리와 관련되어 있습니다.


각 노드는 최대 4개의 포인트에 연결될 수 있으며, 이는 많은 것을 단순화합니다. 여기에 제 생각을 표현하겠습니다.


struct stop {
int path, id;
stop* a;
stop* b;
stop* c;
stop* d;
};

BFS에 필요한 모든 정보를 저장하는 코드를 작성할 수 있지만, 제 주요 관심사는 BFS가 포인트를 올바르게 찾아내더라도 해당 포인트의 경로를 어떻게 알 수 있는지입니다.


BFS는 각 레벨을 탐색하고, 그 중 하나가 도착지에 도달하면 실행 루프를 빠져나오게 됩니다. 그런 다음, 방문한 큐와 방문하지 않은 큐를 얻게 되는데, 방문한 큐에 BFS가 탐색한 모든 노드가 채워져 있을 때 사용자에게 어떤 정류장을 방문해야 하는지 알려주어야 합니다.

답변 1

이를 위해 각 노드 v에 대해 v를 발견한 정점 u를 매핑하는 map:V->V (정점에서 정점으로)을 저장해야 합니다.


BFS 반복 중에이 맵을 채우게 됩니다.


나중에는 맵에서 목표 노드에서 출발지에 도달 할 때까지 이동하여 경로를 재구성할 수 있으며, 이것이 당신의 경로가 될 것입니다 (물론 역으로).


이 맵은 정점을 열거하면 배열로 구현할 수 있습니다.

답변 2

BFS(Breadth-First Search)로 찾아진 실제 경로를 어떻게 찾을 수 있을까요?
BFS(Breadth-First Search)는 그래프 탐색 알고리즘 중 하나로, 가장 가까이 있는 노드들을 먼저 탐색하는 방식으로 동작합니다. 이 알고리즘은 넓게 탐색하기 때문에 시작 노드에서 목표 노드까지의 최단 경로를 찾는데 사용됩니다. 하지만 BFS가 경로를 찾는 것은 아니며, 다만 경로를 탐색하는데 중요한 역할을 맡고 있습니다.
BFS 알고리즘이 동작하는 방식을 이해하기 위해서는 큐(Queue)라는 자료구조를 이용한다는 것을 알아야 합니다. BFS는 항상 시작 노드에서 탐색을 시작하며, 시작 노드를 큐에 넣고 방문했음을 표시합니다. 그리고 해당 노드와 이어진 이웃 노드들을 하나씩 확인하며 방문 여부를 확인하여 큐에 넣습니다. 이 과정을 큐가 비워질 때까지 반복하면, 탐색이 완료된 후 모든 노드들의 방문 여부와 최단 경로를 알 수 있게 됩니다.
실제로 경로를 탐색하는 방법은 다음과 같습니다. 우선 BFS를 수행한 후에는 각 노드마다 해당 노드에 도달한 이전 노드를 기록한 배열 또는 맵을 만들어야 합니다. 시작 노드에서 목표 노드까지 가는 경로를 추적하기 위해서는 목표 노드를 기준으로 이전 노드를 따라가면 됩니다. 이전 노드를 따라가면 시작 노드까지 도달하는 최단 경로를 찾을 수 있습니다.
따라서, BFS를 이용하여 탐색을 완료한 후에는 목표 노드에서 시작 노드까지 이전 노드를 따라가면 실제 경로를 찾을 수 있습니다. 이 경로는 구성된 배열이나 맵에 기록되어 있으므로, 이를 통해 경로를 알아낼 수 있습니다.
이러한 방법을 통해 BFS 알고리즘이 수행된 후 실제 경로를 찾는 방법을 알아봤습니다. BFS는 넓게 탐색하여 최단 경로를 찾는 강력한 알고리즘인 반면, 경로 찾기를 위해서는 BFS가 수행된 후에 추가적인 작업이 필요합니다. 이러한 알고리즘과 경로 탐색 방법을 이해하면, 다양한 문제에서 유용하게 활용할 수 있는 BFS를 더욱 효과적으로 사용할 수 있습니다.

반응형
Comments