Red de conocimiento informático - Aprendizaje de código fuente - Programación más corta

Programación más corta

¿El gráfico de entrada-salida está descrito por una matriz de adyacencia? Si es así, te copiaré mi código:

# include ltstdio.h gt

# include ltstdlib.h gt

#define infinity 9999

#Definir el número máximo de vértices 20

typedef estructura {

int vexs[MAX _ VERTEX _ NUM]

int arcs; [20][20];

int vexnum, arcnum

} MGraph

void ShortestPath_DIJ(MGraph G, int v0, int D[]){

int *final, min, I, v, w, vex, ruta[20], j, ruta 2[20];

Printf("Ingrese el vértice a alcanzar: " );

scanf("d ", ampvex);

final =(int *)malloc(sizeof(int)* g . vex num);

for(v = 0; v ltg . vixnum; v){

final[v]= 0;

d[v]= g arcos[v 0][. v];

}

for(w = 0; w ltg . vixnum; w ){

if(g . arcs[v 0][w ] lt; infinito)

ruta[w]= v 0;

else ruta[w]=-1;

}

d[v 0]= 0; final[v 0]= 1; ruta[v 0]=-1; i ltg . vixnum; i){

min = infinito;

for(w = 0; w ltg . vixnum um; w)

si(! final[w]){

if(D[w] lt;mínimo){

v = w;

min = D[w];

}

}

final[v]= 1;

for(w = 0; w ltg . vixnum; w)

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

d[w]= min g arcos[v][w];

ruta[w]= v;

}

}

Printf("El. la distancia más corta entre dos vértices es d\n\n ", D[vex]);

Printf("Dos vértices El camino más corto entre vértices es: ");

for( w = 0; w ltg . vixnum; w )

ruta 2[w]=- 1;

I = 1; ruta 2[0]= vex; /p>

mientras(ruta[w]! =-1){

ruta 2[i]= ruta[w];

w = ruta[w];

}

for(w = g . vex num-1; w gt=0; w - ){

if(ruta[vex]=

=-1){

Printf("No existe una ruta factible entre d y d", v0, vex

Break;

}< / p>

if(ruta2[w]!=-1)

printf("d ", ruta 2[w]);

}

printf(" \ n ");

printf(" \ n ");

}

int principal(){

< p); >int D[20], I, j, v0

m gráfico G;

for(I = 0; i lt20; i)

g . vexs[I]= I;

for(I = 0;i lt20;i)

for(j = 0;j lt20;j)

g . arcos[I][j]=infinito;

g . vex num = 6; g . arcnum = 8;

g . ; g . arcos[0][4]= 30;

g . >g . arcos[2][3]= 50; g . arcos[3][5]= 10;

g . [5]= 60;

for(I = 0;i ltg . vixnum; i ){

for(j = 0;j ltg .vic snum;j)

printf("4d", g. arcs[I][j]);

printf("\n");

}

while(1){

Printf("Ingrese el vértice inicial: ");

scanf("d ", ampv 0);

ShortestPath_DIJ( G, v0, D);

}

Sistema("pausa");

}