La figura árbol de expansión mínima (Prim algoritmo)

Á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

Aquí Insertar imagen Descripción
① 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
Aquí Insertar imagen Descripción
② se alimenta a un primer vértice 1, para actualizar la matriz {0,6,1, 5,, max} (denota max el valor máximo) max
Aquí Insertar imagen Descripción
③ 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}
Aquí Insertar imagen Descripción
④ 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

Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

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;
 }

resultados La Figura

Aquí Insertar imagen Descripción

Publicado 88 artículos originales · ganado elogios 2 · Vistas 1735

Supongo que te gusta

Origin blog.csdn.net/qq_41891805/article/details/105300074
Recomendado
Clasificación