프림 최소 스패닝 트리 알고리즘 [1]

범위 :도 없음.

꼼꼼한 알고리즘 (독자로 읽을 수 있습니다 " 프림의 알고리즘 "), 트리 문제에 걸쳐 최소를 해결하기 위해

기본적인 아이디어는 다음과 같습니다

도는 정점 방문한 저장, S · 세트 G (가 VE)를 설정

· 최소 최단 거리를 설정 한 후 각각의 선택과는 정점 VS, 수집 및 S. 대한 액세스들의 세트로부터 (U로 표시) ■

U와 V 세트 S.로부터 도달 할 수있는 모든 꼭지점 사이의 최소 거리 사이의 중간 점을 정점으로 U 연

이 동작이 수행 n 회 (n은 정점의 개수)가 이미 세트 S 모든 정점까지 포함된다. 찾을 수 생각 최단 경로 알고리즘은 프림 익스트라 알고리즘은 최단 거리를 언급하는 경우를 제외하고는 거의 동일하다 생각 세트 S 대신 익스트라 시작점 알고리즘 들.

. (1)  INT 프림 ()
 (2)  
. (3) { // 시작점 0 기본적은 기능은 우측 최소 스패닝 트리를 반환 
4.  
5.      fi11 (D, D + MAXV, Inf를) // 전체 배열 D에 할당 fi11 함수 INE (주의가 memset) 
6.  
7.      D [ 0 ] = 0 ; // 만 정점 거리가 0 Inf를 나머지이며, 0들로 설정 
. (8)  
(9).      INT ANS = 0 ; //이 최소 스패닝 트리의 오른쪽 보관 및 
10  
. 11       ( INT I = 0 ; I <N; I ++ )
 (12)은  
(13)     { // 루프 n 회 
14  
15          INT U = -. (1) , MIN = Inf를; // U되도록 D [U] 최소값 MIN 최소 저장 D [U] 
16  
(17).           ( INT J = 0 ; J <N-, J ++ )
 (18)이다  
. (19)          { // 찾을 방문하지 않은 정점 D []에서는 최소 
20 인  
21되는              IF (VIS은 [J]를 == false로 && D [J]를 < MIN)
 (22)가  
23 인              {
 24  
(25)                  U = J,
 26은  
27                  MIN = D [J],
 28  
(29)              }
 (30)  
(31)이다          }
 (32)  
(33)          //D는 [U]를 Inf를 덜 정점의 나머지 (S)의 집합 통신하지 않는 이상 발견되지 않는 
34 인  
35          IF - (유 == . 1 )
 36  
37 [               - . 1 ,
 38 인  
39          VIS [U] = true로 ; // 태그 U 방문로 
(40)  
(41)는          ANS = D +는 [U]을; //가 설정하는 최소 거리의 트리에 걸쳐 최소가하면서 
42 인  
43 것은          대한 ( INT의 V = 0 , V <N-; V ++ )
 (44)가  
45          { // V 방문하지 않은 && && U는 V와 U는 집합 가까워 S로부터 중개 지점 (V)가 제조 될 수있는 범위 
(46)가  
47              IF (VIS [V] == false로 && G [U] [V]! = Inf를 && G [U] [V] <D [V])
 (48)  
(49)                  D는 [V] = G [U]을 [V]; // G [U]을 [V] D [V]에 할당된다 
(50)  
(51)이다          }
 52되는  
53이다      }
 (54)는  
55      반환 ANS; // 반환 오른쪽 최소 스패닝 트리의 측면, 및 
56은  
57 }

 

 

 

추천

출처www.cnblogs.com/zzw1024/p/11912499.html