Prim 알고리즘 (최소 생 성 트 리)
w(T)=∑(u,v)∈Tw(u,v)
의 값 이 가장 작다.그림 은 고리 가 없 는 것 이 고 모든 정점 을 연결 하기 때문에 T 는 반드시 나무 일 것 이다. 이런 나 무 는 우리 가 가장 작은 생 성 나무 가 된다.
Prim 알고리즘 은 최소 생 성 트 리 를 해결 하 는 방법 으로 욕심 알고리즘 에 속한다.구체 적 인 사상 은 1 개의 노드 R 에서 출발 (
R * 8712 ° A) 는 V 의 모든 정점 을 덮 을 때 까지 자 랐 습 니 다. 알고리즘 은 한 걸음 한 걸음 집합 A 와 A 를 제외 한 모든 변 에 경량급 변 을 선택 하여 A 에 넣 었 습 니 다. 알고리즘 이 종 료 될 때 A 의 변 은 최소 생 성 트 리 를 만 듭 니 다.
다음은 저 개인의 실현 코드 를 드 리 겠 습 니 다.
#include <iostream>
#define INIFY 65533
#define ROW 9
#define COL 9
class Prim{
private:
int Array[ROW][COL];
public:
void CreateGraphy(){
int i,j,k,EdgeNumbers;
std::cout<<" : "<<std::endl;
std::cin>>EdgeNumbers;
//
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
Array[i][j]=INIFY;
//
std::cout<<" : "<<std::endl;
while(EdgeNumbers--){
std::cin>>i>>j>>k;
//
Array[i][j]=k;
Array[j][i]=k;
}
}
void PrimAlgorithm(){
int VertexNumber=ROW;
int i,j,k,Min;
int lowcost[VertexNumber],Adj[VertexNumber];
//
lowcost[0]=0,Adj[0]=0;
std::cout<<" : "<<std::endl;
for(int i=1;i<VertexNumber;i++){
lowcost[i]=Array[0][i];
Adj[i]=0;
}
for (i = 1; i <VertexNumber; i++){
Min =INIFY; /* ∞, */
j = 1;
k = 0;
//
while(j<VertexNumber){
if (lowcost[j] != 0 && lowcost[j] < Min){
Min = lowcost[j];
k = j;
}
j++;
}
std::cout << "(" <<Adj[k] << ", " << k << ")" << " "; /* , */
lowcost[k] = 0;/* 0 */
for(j=1; j<VertexNumber; j++){
if (lowcost[j] != 0 && Array[k][j]<lowcost[j]){
lowcost[j]=Array[k][j];/* lowcost */
Adj[j]=k;/* k Adj */
}
}
}
std::cout<<std::endl;
}
};
int main(void){
Prim ivec;
ivec.CreateGraphy();
ivec.PrimAlgorithm();
return 0;
}
테스트 용례 는 알고리즘 서론 에서 prim 알고리즘 을 말 할 때의 테스트 용례 이다.그 중 a b c d e f g h i 는 1, 2, 3, 4, 5, 6, 7, 8 로 대체 합 니 다.실행 결과: - - - - - - - - - - - - - 참고 자료: 알고리즘 서론 제3 판http://blog.csdn.net/jnu_simba/article/details/8869876
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.