가장 일시적으로 네 마스터,하지만 난 다 익스트라의 복잡성 사용할 수 있습니다 느낄 단락의 경우;
1 플로이드 알고리즘 :
환승 지점, 모든 지점을 통해 때마다 각 지점 폭력의 트리플 사이클이 통과 지점 가장 짧은 경로를 통해 업데이트 할 수있는 경우, 참조입니다;
장점 : N <이와 같이,도 인접 행렬 메모리와가 수정 (200)의 임의의 두 지점이 짧다; 좋은 기록하는 단계;
단점 : 복잡도가 너무 높으면, O (N ^ 3) 복잡한 너무 불필요한 계산이고;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
보이드 플로이드 () { // J에게 DIS 어레이 난 최단 경로 나타내는 대 ( INT에서 K = 0 , K <N-; K ++) // 포커스 외부에 있어야 대 ( INT 난 = 0 ; I <N-; I ++ ) 대 ( INT J = 0 ; J <N-, J ++ ) 12월 [I] [J] = 분 (DIS [I] [J], 불이익 [I] [K] + 12월 [K] [J]); }
2 벨보이 - 플로이드 알고리즘 :
그것은 이웃 업데이트 최단 경로 단일 소스를 해결할 수 있는지 최단 경로를 n 회 반복하고, 각각의 시간 참조 각 가장자리에 의하면
장점은이 방법이 고려 될 수 1E7 N <병렬로 계산도 저장 구조의 어레이를 이용하여, 라인주기를 결합하는 방법이다
단점 : 복잡도는 매우 높은 여전히 각 점 O (N * m) 복잡성;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
보이드 벨만 () { INT S, t는; // 출발 지점, t는 종점 s의 대 ( INT I = 1. ; I <= N-; I ++) DIS [I] = INF; // DIS는 S 배열에 모든 점을 대표 최단 DIS [S] = 0 ; 대 ( INT K = . 1 ; K <= N-; K ++ ) 대 ( INT I = 0 ; I <CNT; I ++ ) { INT X = E [I] .u, Y = E [I] .V; IF (DIS [X]> DIS [Y] + E [I] .W) { // 업데이트 거리 DIS [X] = DIS [Y] + E [I] .W; } } COUT << DIS [t]; }
3 SPFA :
단점 : 불안정한 점,
알고리즘 : 검색 및 다양한 같은;
학습 한 후 업데이트;
4 익스트라 :
알고리즘은 : 상기 제 1 반복 그리 생각에 기초하여, 즉, 각 업데이트 후, 최종 지점까지의 최단 경로는 다른 지점에 이르기까지 경로의 거리보다 커야하기 때문에, 최단 경로 여야;
장점 :도 인접성 테이블 메모리 복잡도가 수용 고려 안정된, 단일 소스 최단 경로 문제 해결, O (m * 로그 (N))의 복잡성;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
INT 익스트라 () { INT의 S, t; // S는 t가 끝이고, 시작점을 나타내는 대를 ( INT I = 0 ; I <= MAXN; I ++) DIS는 [I]가 = INF가 완료 [I] = 0 ; DIS는 [S] = 0 ; //는 각 지점이 최단 기록 배열 할 것인지, 짧은 S를 나타내고 DIS priority_queue <노드> Q; Q.push (노드 (S, 0 )); 동안 (! Q.empty ()) { 노드 U = Q.top (); () Q.pop; 경우 (다 [u.id]) 계속 ; 완료 [u.id] = 1 ; 위한 ( INT 난 = 0 ; I <E [u.id] 크기는 ()을, 난 ++ ) { 에지 Y = E [u.id [I]; 경우 (다 [YV]가) 계속 ; 경우 (DIS [YV]>에 .W + u.dis) { DIS [YV은] = + Y. W.는 u.dis; // 업데이트 최단 이웃 } Q.push (노드 (YV, DIS [YV])) // 각 이웃 노드 확장 올 } } 반환 DIS [t]을; }
몰수 문제 원, 추가 학습;