當前位置:歷史故事大全網 - 歷史天氣 - 严蔚敏数据结构题集(C语言版)实习题答案

严蔚敏数据结构题集(C语言版)实习题答案

/* 使用邻接矩阵表示的图的prim算法的源程序*/

#include

#define MAXVEX 6

typedef char VexType;

typedef float AdjType;

typedef struct {

int n; /* 图的顶点个数 */

/*VexType vexs[MAXVEX]; 顶点信息 */

AdjType arcs[MAXVEX][MAXVEX]; /* 边信息 */

} GraphMatrix;

typedef struct{

int start_vex, stop_vex; /* 边的起点和终点 */

AdjType 权重; /* 边的权 */

} Edge;

边缘 mst[5];

#define MAX 1e+8

void prim(GraphMatrix * pgraph, Edge mst[]) {

int i, j, min, vx, vy ;

浮动重量、最小重量; 边缘边缘;

for (i = 0; i < pgraph->n-1; i++) {

mst[i].start_vex = 0;

mst[i].stop_vex = i+1;

mst[i].weight = pgraph->arcs[0][i+1];

}

for (i = 0; i < pgraph->n-1; i++) { /* ***n-1条边 */

< p>最小权重=最大; 最小值=我;

for (j = i; j < pgraph->n-1; j++)/* 从所有边(vx,vy)(vx∈U,vy∈V-U)中选出最短的边 * /

if(mst[j].weight < 最小权重) {

minweight = mst[j].weight;

最小值=j;

}

/* mst[min]是最短的边(vx,vy)(vx∈U, vy∈V-U),将mst[min]加入最小生成树 * /

edge = mst[min];

mst[最小值] = mst[i];

mst[i] = 边缘;

vx = mst[i].stop_vex; /* vx为刚加入最小生成树的顶点的下标 */

for(j = i+1; j < pgraph->n-1; j++) { /* 调整mst[i+ 1]到mst[n-1] */

vy=mst[j].stop_vex; 权重 = pgraph->arcs[vx][vy];

if (权重 < mst[j].weight) {

mst[j].weight = 权重;

mst[j].start_vex = vx;

}

}

}

}

GraphMatrix 图 = {

6,

{{0,10,MAX,MAX,19,21},

{ 10,0,5,6,MAX,11},

{MAX,5,0,6,MAX,MAX},

{MAX,6,6,0, 18,14},

{19,MAX,MAX,18,0,33},

{21,11,MAX,14,33,0}

}

};

int main(){

int i;

prim(&graph,mst);

for (i = 0; i < graph.n-1; i++)

printf("(%d %d %.0f)\n", mst[i] .start_vex,

mst[i].stop_vex, mst[i].weight);

返回0;

}

  • 上一篇:企业安全生产标准化工作应遵循什么原则
  • 下一篇:甘肅省2022年高臺壹中中考總分?
  • copyright 2024歷史故事大全網