¿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.
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>
P[w][w] = VERDADERO // P[w] = P[v] [w]
}//if
}// para
}// ShortestPath_DIJ