Colección de citas famosas - Mensajes de felicitación - Respuestas a las preguntas de práctica en el conjunto de preguntas sobre estructura de datos de Yan Weimin (versión en lenguaje C)

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>

}

}

}

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;

}