> 백엔드 개발 > C++ > 주어진 그래프에서 두 노드 사이의 경로가 최단 경로를 나타내는지 확인합니다.

주어진 그래프에서 두 노드 사이의 경로가 최단 경로를 나타내는지 확인합니다.

王林
풀어 주다: 2023-09-07 18:57:05
앞으로
566명이 탐색했습니다.

주어진 그래프에서 두 노드 사이의 경로가 최단 경로를 나타내는지 확인합니다.

그래프의 두 중심 사이의 주어진 경로가 최단 경로를 따르는지 확인하려면 신뢰할 수 있는 최단 경로 방식을 사용하여 주어진 경로를 따른 전체 가장자리 가중치를 동일한 중심 조합 간의 최단 거리와 비교할 수 있습니다. , Dijkstra 계산 또는 Floyd−Warshall 계산과 같은 것입니다. 주어진 경로의 모든 간선 가중치가 가장 제한된 삭제와 일치하면 이는 가장 간단한 경로를 나타냅니다. 또한: 전체 모서리 가중치가 최단 거리보다 더 두드러지면 그래프에서 두 중심 사이의 거리가 짧다는 것을 나타냅니다.

사용방법

  • 다익스트라 알고리즘

  • 에지 반전 비용이 있는 Floyd−Warshall 알고리즘

그리디 알고리즘

Dijkstra의 계산은 아마도 그래프에서 소스 중심과 다른 모든 중심 사이의 가장 제한된 경로를 찾는 데 사용되는 인기 있는 그래프 순회 계산일 것입니다. 두 중심 사이의 주어진 경로가 최대 유한 경로와 관련되어 있는지 확인하는 경우 Dijkstra의 계산을 사용하여 이들 중심 사이의 최대 유한 분리를 계산할 수 있습니다. 시작 허브에서 Dijkstra의 계산을 실행하여 다른 모든 허브에 대해 가장 유한한 간격을 얻습니다. 주어진 경로가 두 허브 사이의 가장 제한된 거리와 일치하면 이는 실질적이고 최단 경로를 나타냅니다. 기타: 주어진 경로가 계산된 최단 거리보다 길면 차트에 더 짧은 경로가 있음을 나타냅니다.

알고리즘

  • 최단 경로 생성(그래프, 소스, 대상):

  • 중심까지의 거리를 저장하려면 "과거" 집합을 초기화하고, 가장 제한된 거리를 저장하려면 단어 참조 간격을 초기화하세요.

  • 구분자 사전에서 소스 허브의 간격을 무한대로 설정하고 다른 모든 허브의 간격을 무한대로 설정합니다.

  • 방문하지 않은 노드가 있지만

  • 아. 구분 단어 참조로부터 가장 작은 거리를 가진 중심이 선택되고 방문한 것으로 표시됩니다.

  • b. 현재 노드의 각 이웃 허브에 대해:

  • 현재 노드의 거리에 가장자리 가중치를 더하여 임시 간격을 계산합니다.

  • 조건 간격이 보관 간격보다 작을 경우 검사 거리입니다.

  • 분리의 소스에서 대상까지의 최단 거리가 주어진 경로 길이에도 불구하고 중단되는 경우 true를 반환합니다(주어진 경로는 최단 경로를 나타냅니다). 그렇지 않으면 false를 반환합니다.

  • 이 계산은 Dijkstra의 방법을 활용하여 최단 간격을 계산한 다음 출발지에서 목적지까지의 최단 거리를 주어진 경로 길이와 비교하여 최단 경로인지 판단합니다.

으아아아

출력

으아아아

에지 반전 비용이 있는 Floyd−Warshall 알고리즘

Floyd-Warshall 계산은 그래프의 모든 중심 쌍 사이의 최단 경로를 찾는 동적으로 프로그래밍된 계산입니다. 두 중심 사이의 주어진 경로가 가장 제한된 경로와 관련되어 있는지 확인하는 경우 Floyd-Warshall 계산을 사용하여 그래프의 모든 중심 집합 사이의 최단 거리를 계산할 수 있습니다. 계산된 최단 거리를 주어진 경로의 모든 가장자리 가중치와 비교함으로써 주어진 경로가 가장 유한한 경로를 포함하는지 여부를 결정할 수 있습니다. 전체 간선 가중치가 가장 짧은 간격과 일치하면 이때 주어진 경로는 아마도 그래프에서 두 중심 사이의 가장 제한된 경로일 것입니다.

알고리즘

  • numNodes x numNodes를 측정하는 2D 그리드를 만들고 모든 노드 세트에 대해 무한대(INF)로 초기화합니다.

  • dist의 모서리 간 추가를 0으로 설정합니다.

  • 그래프에서 가중치 w가 있는 각 조정 간선(u, v)에 대해 dist[u][v]를 w로, dist[v][u]를 w w_reversal로 완전히 수정합니다. 여기서 w_reversal은 다음을 통해 얻은 반전입니다. 가장자리(v,u).

  • 고정 루프 후 Floyd−Warshall 계산 수행:

  • numNodes에서 1까지의 각 중간 허브에 대해 다음을 수행합니다.

  • 허브 i와 j의 각 집합에 대해 numNodes에서 1로 dist[i][j]를 최소값으로 개선합니다.

  • 거리[i][j]

  • 거리[i][k]거리[k][j]

  • 계산이 완료된 후 dist에는 에지 반전 비용을 고려하여 모든 허브 그룹 간의 가장 제한된 분리가 포함됩니다.

  • 두 허브(출발지와 목적지) 사이의 주어진 경로가 최단 경로인지 확인하려면 주어진 경로의 길이를 거리 [출발지][목적지]와 비교하세요. 그렇다면 주어진 방법은 가장 제한적인 방법이다.

으아아아

출력

으아아아

결론

이 글에서는 그래프의 두 중심 사이의 주어진 경로가 가장 유한한 경로를 나타내는지 확인하는 방법을 살펴봅니다. 이는 에지 반전을 얻기 위한 Dijkstra 계산과 Floyd-Warshall 계산의 두 가지 방법을 보여줍니다. C의 코드 사용법은 이러한 계산을 보여줍니다. 또한 계산과 그 용도에 대해 간략하게 설명합니다. 이 기사는 독자가 그래프에서 가장 제한된 방법을 찾는 방법을 이해하고 주어진 방법이 의심할 여지없이 가장 간단한지 판단하는 데 도움을 주기 위해 작성되었습니다.

위 내용은 주어진 그래프에서 두 노드 사이의 경로가 최단 경로를 나타내는지 확인합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿