최소 스패닝 트리
정의 : 무게 나무 가장자리 (고려)과의 최소 스패닝 트리
꼼꼼한
프림의 알고리즘 : 알고리즘 프림의 알고리즘, 그래프 이론,도 통신의 최소 무게 스패닝 트리에 대한 검색.
시는 : 알고리즘은 체코 수학자 Woyijiehe에 의해 1930 년에 발견되었다 · 로얄 닉 (보이 텍 자닉)와 독립적으로 미국의 컴퓨터 과학자 로버트 프림 1957 년 (로버트 C. 프림)에 의해 발견, 1959 년, Aizi GE는 · 다 익스트라의 알고리즘을 다시 발견했다. 따라서, 어떤 경우에는, 프림의 알고리즘은 DJP 알고리즘으로 알려진, 또는 닉 프림 야르 알고리즘입니다 - YAR 닉 알고리즘.
특정 아이디어 알고리즘
정보는 스패닝 트리 최소의 메모리 맵을 모든 점 배열 [] 작성 ①
트리의 정점이 2 차원 배열의 포인트로부터도 거리에있는 모든 정점을 얻기 위해 추가 걸친 최소 아웃 ②와 어레이 정보를 갱신 []
③ 정보 갱신 배열 [], 트리 최단 거리에 걸친 최소의 정점의 위치에 기반
스패닝 트리 최소의 정점에 첨가 하였다 ④와 어레이 정보를 [] 업데이트 :
어떤 정점 거리가 새로 추가 된 정점에 첨가하지 않으면 이하의 거리의 최소 스패닝 트리 이전 정점보다 정보의 배열 업데이트
모든 번호 ⑤ ③④ 동작 배열 정보 []는 0, 즉, 모든 정점이 최소 스패닝 트리에 존재할 때까지 반복된다
도표
① 새로운 배열 정보 [6]이다 정보 [A -1 ( 제로 배열)와, 최소 스패닝 트리의 정점까지의 거리를 나타내는
배열 {0,6,1를 업데이트하는 제 정점 (1)에 공급된다 ②, 5, 최대, 최대} (최대이고 최대 값)이
최소의 값을 알 수는 ③ 해당 정점 3, 1, 최소 스패닝 트리를 첨가
다른 거리 정점 {1,5,0,5,6에 가장 3 식별 4} 및 {0,6,1,5 이전에 그려진, 최대, 최대} 비교하여 작은 값을 대체한다, 즉 짧은 경로 {0,5,0,5,6 어레이가 업데이트되고 4}
4 ④ 최소값 정점 6 대응 최소 스패닝 트리 첨가 알아내는
작업이 해당 줄을 반복하기 전의
⑤
⑥
자세한 코드
/**
* 构建最小生成树,求得最短路径
* @param sMap 图
* @param first 开始构建树时加入的第一个结点
* @return 最短路径
*/
public int createMinProTree(SimpleMap sMap,int first) {
//构建一个数组,用于存储当前图到其他结点的最小权值
int[] minInfo = new int[sMap.num];
int lenghth = 0;
//初始化数组(从1(数组中索引为0)开始构建)
System.out.println("加入顶点:"+first);
for(int i=0; i<sMap.num; i++) {
//第一列存储最小权值
minInfo[i] = sMap.map[first-1][i];
}
//最小生成树中顶点数
int number = 1;
while(number < 6) {
//遍历当前数组,找到距离最短的路径对应的顶点加入
int minValue = CreateAMap.MAX;
int index = 0;
for(int i=0; i<sMap.num; i++) {
if(minInfo[i] !=0 && minValue > minInfo[i]) {
minValue = minInfo[i];
index = i;
}
}
//将index对应的顶点加入树中,更新树中数据(保持其他顶点到树的距离最短)
System.out.println("加入顶点:"+(index+1));
lenghth += minValue;
minInfo[index] = 0;
for(int i=0; i<sMap.num; i++) {
if(minInfo[i] > sMap.map[index][i]) {
minInfo[i] = sMap.map[index][i];
}
}
number++;
}
return lenghth;
}