Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo implementar el problema de la ruta más corta de fuente única en lenguaje C? Es necesario utilizar el algoritmo de Dijkstra. Lo mejor es escribir todo el código, incluidas las definiciones de estructura, etc., en un archivo.

¿Cómo implementar el problema de la ruta más corta de fuente única en lenguaje C? Es necesario utilizar el algoritmo de Dijkstra. Lo mejor es escribir todo el código, incluidas las definiciones de estructura, etc., en un archivo.

Código C: //Código del CD de prensa de la Universidad de Tsinghua

void ShortestPath_DIJ(MGraph G, int v0, PathMatrix & P, ShortPathTable & D)

{ // Algoritmo 7.15

// Utilice el algoritmo de Dijkstra para encontrar el problema de la ruta más corta de fuente única para encontrar la ruta más corta P[v] desde el vértice v0 de la red dirigida G hasta los vértices restantes v

// y su longitud ponderada D[v].

// Si P[v][w] es verdadero, entonces w es el vértice en el camino más corto de v0 a v que se está encontrando actualmente.

// Si y sólo si v∈S, final[v] es VERDADERO, es decir, se ha encontrado el camino más corto de v0 a v. vexnum; w) P[v][w] = FALSE; // Establecer ruta vacía

if (D[v] lt; INFINITY) { P[v][v0] = TRUE; ][v] = TRUE; }

}

D[v0] = 0; final[v0] = TRUE // Inicialización, el vértice v0 pertenece al conjunto S

/ /--- Inicie el ciclo principal, cada vez encuentre la ruta más corta desde v0 a un vértice v y agregue v al conjunto S ---

for (i=1; ilt; G. vexnum ; i)vexnum; i) { // resto de vértices G.vexnum-1

min = INFINITY; // Distancia más cercana actualmente conocida al vértice v0

para (w=0 ; wlt; G.vexnum; w)

if (!final[w]) // w vértice está en V-S

if (D[w]lt. min) { v = w; min = D[w]; } // el vértice w está más cerca de v. // El vértice w está más cerca del vértice v0

final[v] = TRUE; // El v más cercano al vértice v0 se agrega al conjunto S

for (w =0; wlt ;G.vexnum; w) // Actualiza la ruta y la distancia más cortas actuales

if (!final[ w] amp; amp; (min G.arcs[v][w]. adjlt; D[w ])){

// Modifica D[w] y P[w], w ∈ V-S

D[w] = min G.arcs[v ][w]. adj;

for (j=0; jlt; G.vexnum; j ) P[w][j] = P[v][j] // Se asigna la fila v. a la fila w

P[w][w] = VERDADERO // P[w] = P[v] [w]

}//if

}// para

}// ShortestPath_DIJ