범위 :도 없음.
꼼꼼한 알고리즘 (독자로 읽을 수 있습니다 " 프림의 알고리즘 "), 트리 문제에 걸쳐 최소를 해결하기 위해
기본적인 아이디어는 다음과 같습니다
도는 정점 방문한 저장, 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 }