Árbol de expansión mínima
Definición: peso que abarca los bordes del árbol (Examen) y el árbol más pequeño de
Remilgado
Algoritmo de Prim: el algoritmo de un algoritmo de Prim, en la teoría de grafos, la búsqueda de un árbol de expansión mínimo peso en la comunicación en la figura.
PS: El algoritmo fue descubierto en 1930 por el matemático Checa Woyijiehe · Real Nick (Vojtěch Jarník); y descubrió de forma independiente por el informático estadounidense Robert Primm (Robert C. Prim) en 1957; en 1959, Aizi Ge · algoritmo de Dijkstra se encontró de nuevo. Por lo tanto, en algunos casos, el algoritmo de Prim es también conocido como algoritmo de DJP, o algoritmos Nick Primm Yar - yar Nick algoritmos.
algoritmo de ideas específicas
Info ① crear una matriz [], para todos los puntos al mapa de memoria desde el árbol de expansión mínimo
② a cabo una expansión mínima vértice árbol añadió para obtener todos los vértices en la figura distancia desde el punto de matriz bidimensional, y actualiza la matriz Info []
③ Información basado en la matriz actualizada [], para localizar el vértice del árbol de expansión mínima distancia más corta
④ fue introducido en el vértice del árbol de expansión mínima, y actualiza la matriz de información []:
Si no se añade distancia de vértice a vértice recién agregado menor que el vértice anterior para el árbol de expansión mínimo de la distancia, la matriz de Info actualizar
todos los números ⑤ ③④ operación se repite hasta que la matriz de información [] es 0, es decir, todos los vértices están presentes en el árbol de expansión mínimo
diagrama
① nueva matriz es Info [6]: info [a -1] ( matriz de base cero), A representa la distancia al vértice del árbol de expansión mínimo
② se alimenta a un primer vértice 1, para actualizar la matriz {0,6,1, 5,, max} (denota max el valor máximo) max
③ para averiguar el valor mínimo es 1, el vértice correspondiente es 3, se añade el árbol de expansión mínimo
para identificar el más 3 a otro vértice distancia {1,5,0,5,6 , 4} y el previamente dibujado {0,6,1,5, max max} comparación,, un valor pequeño será reemplazado, es decir, el camino más corto, {0,5,0,5,6 matriz se actualiza, 4}
④ valor mínimo de 4 para encontrar el vértice correspondiente 6, se añade el árbol de expansión mínimo
antes de que se repite la operación para dar el correspondiente
⑤
⑥
código detallado
/**
* 构建最小生成树,求得最短路径
* @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;
}