最小生成树-Prim算法
来源:互联网 发布:如何通过源码 编辑:程序博客网 时间:2024/05/18 11:41
【问题】
求一个给定的加权连通图的最小生成树问题。
【代码】
#include <stdio.h>#include <stdlib.h>#define MAXNUM 1000#define MAX_VERTEX_NUM 20typedef char Vertextype;typedef struct node {int weight;}Adjmatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct {Vertextype vexs[MAX_VERTEX_NUM];Adjmatrix arcs;int vexnum, arcnum;}Algraph;typedef struct{int start_vex;int end_vex;int weight;}Edge;void prim(Algraph G, int firstvex){Edge E[MAXNUM];Edge tmp;int vex_num;int m, t, w;int min = MAXNUM, i = 0, j = 0, k = 0;vex_num = G.vexnum;//初始化Edgefor(i = 0; i < vex_num; i++){E[i].start_vex = firstvex;if(i >= firstvex){E[i].end_vex = i + 1;E[i].weight = G.arcs[firstvex][i+1].weight;}else{E[i].end_vex = i;E[i].weight = G.arcs[firstvex][i].weight;}}//对所有的顶点依次处理for(i = 1; i < vex_num; i++){min = MAXNUM; m = i - 1;//找出当前顶点的最小权重边for(j = i - 1; j < vex_num - 1; j++){if(E[j].weight < min){min = E[j].weight;m = j;}}//依次将处理完的顶点放到前端tmp = E[i - 1];E[i - 1] = E[m];E[m] = tmp;j = E[i - 1].end_vex;//更新权重for(k = i; k < vex_num - 1; k++){t = E[k].end_vex;w = G.arcs[j][t].weight;if(w < E[k].weight){E[k].weight = w;E[k].start_vex = j;}}}}
0 0
- Prim最小生成树算法
- 最小生成树Prim算法
- 最小生成树Prim算法
- 最小生成树----Prim算法
- 最小生成树Prim算法
- Prim 最小生成树算法
- 最小生成树:Prim算法
- Prim算法 ----最小生成树
- 最小生成树-prim 算法
- 最小生成树(prim算法)
- 最小生成树 prim算法
- 最小生成树 prim算法
- Prim最小生成树算法
- 最小生成树prim算法
- 最小生成树--prim算法
- 最小生成树Prim算法
- 最小生成树(Prim算法)
- 最小生成树----Prim算法
- 全方位的软件测试管理 - 概要描述
- 很无语,吐个槽
- 沿对角线填充矩阵
- Spring基于 Annotation 的简单介绍
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 最小生成树-Prim算法
- Java中的Condition --使线程间通信更高效
- 内存对齐详解
- 通过 Intent传递数据,并返回结果
- 【原创】关于联想Y400适配器和电池同时使用无法开机的问题
- 2. 算术运算
- 细说对象的相等性
- iOS获取设备剩余存储空间代码片段
- ASM--统计输入的字符个数,并输出