(Floyd) entrada algoritmo de Floyd

Este algoritmo es, de hecho, lleva a cabo sobre la base de la visión de un algoritmo de programación dinámica (similar a 01 mochila)
parte de la referencia de código y las ideas de que el algoritmo del camino más corto

Set Di, j, k de i a j sólo para (1 ... k) es el conjunto de nodos en la longitud del camino más corto del nodo intermedio, a continuación, de acuerdo con el pensamiento de que la mochila 01 1. J desde el vértice al vértice I no es después de la K, es Dijk-1,2. Si que, después de k, a continuación, poner la división dos vértices en Dikk-1 + Djkk-1 dos porciones de
valores y luego utilizar los tres ciclos, para encontrar la correspondiente.
Por último, de tres dimensional array se puede convertir en una matriz de dos dimensiones

Three-dimensional forma array:

void floyd()
{
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			dis[i][j][0]=map[i][j];
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				dis[i][j][k]=dis[i][j][k-1];
				if(dis[i][j][k]>dis[i][k][k-1]+dis[k][j][k-1])
					dis[i][j][k]=dis[i][k][k-1]+dis[k][j][k-1];
			}
} 

Two-dimensional forma array:

  for(int k =1 ;  k <= n ; k ++ ){
      for(int i =1 ; i<= n ; i++){
          for(int j =1 ;j<=n;j++){
                 dist[ i ][ j ]= min( dist[ i ][ j ],dist[ i ][ k ]+dist[ k ][ j ] );      
            }
       }
  }

Para concluir, Floyd algoritmo es adecuado para múltiples orígenes y múltiples finales, pero el método Dykstra es más conveniente solamente puntos inicial y final.

Publicado 72 artículos originales · ganado elogios 5 · Vistas 2821

Supongo que te gusta

Origin blog.csdn.net/qq_41115379/article/details/104878874
Recomendado
Clasificación