Respuestas a las preguntas de práctica en el conjunto de preguntas sobre estructura de datos de Yan Weimin (versión en lenguaje C)
/*Programa fuente del algoritmo Prim para gráfico representado por matriz de adyacencia*/
#includelt.hgt
#define MAXVEX 6
p>
typedef char VexType;
typedef float AdjType;
typedef struct {
int /* Número de vértices de el gráfico*/
/*VexType vexs[MAXVEX]; Información de vértice*/
AdjType arcs[MAXVEX][MAXVEX] /* Información lateral*/
<; p>} GraphMatrix;typedef struct{
int start_vex, stop_vex; /* El punto inicial y final del borde*/
AdjType peso ; /* El peso del borde*/
p>
} Borde
Edge mst[5]
#define MAX 1e 8;
void prim(GraphMatrix * pgraph, Edge mst[ ]) {
int i, j, min, vx, vy
peso flotante, peso mínimo; Borde borde;
for (i = 0; i lt; pgraph-gt; n-1; i ) {
mst[i].start_vex = 0;
mst[i].stop_vex = i 1;
mst[i].weight = pgraph-gt; arcos[0][i 1]
}
p>for (i = 0; i lt; pgraph-gt ;n-1; i) { /* ***n-1 bordes*/
minweight = MAX min = i; ;
for (j = i; j lt ; pgraph-gt; n-1; j )/* Seleccione el borde más corto de todos los bordes (vx, vy) (vx∈U, vy∈V-U) */
if(mst[j ].peso lt; peso mínimo) {
peso mínimo = mst[j ].peso
min = j; /p>
}
/* mst[min] es el borde más corto (vx, vy) (vx∈U, vy∈V-U), agregue mst[min] al árbol de expansión mínimo* /
borde = mst[min];
mst[min] = mst[i];
mst[i] = borde
vx = mst[i].stop_vex; /* vx es el subíndice del vértice recién agregado al árbol de expansión mínimo*/
for(j = i 1; j lt; pgraph-gt ; n-1; j) { /* Ajustar mst[i 1] a mst[n-1] */
vy=mst[j].stop_vex; ][vy];
si (peso lt;
mst[j].peso) {
mst[j].peso = peso
mst[j].start_vex = vx
} p>
p>
}
}
}
GraphMatrix gráfico = {
6,
{{0, 10, MÁX, MÁX, 19, 21},
{10, 0, 5, 6, MÁX, 11},
{MÁX, 5, 0, 6 , MÁX, MÁX},
{MÁX, 6, 6, 0, 18, 14},
{19, MÁX, MÁX, 18, 0, 33},
p>
{21, 11, MAX, 14, 33, 0}
}
}; p>int main(){
int i;
prim(amp; gráfico, mst); .n-1; i)
printf("(d d .0f)\n", mst[i].start_vex,
mst[i].stop_vex, mst[i ].peso);
devuelve 0;
}