新手初学数据结构1 普利姆算法
来源:互联网 发布:淘宝店铺怎么设置客服 编辑:程序博客网 时间:2024/06/05 11:00
算法的内容原理比较好理解,我想说的是我在编代码的时候理解上遇到的问题,关于vexs和weight 两个数组的用途,weigh用来标记那个顶点已经访问过了,所以不能用简单的一个大for 要确保weight的作用
#define MAX_VEX 6#define MAX_ARC 6typedef enum { DG, DN, UDG, UDN } Graphkind;typedef struct {int adj;int info;}Arcnode;typedef struct {char vexs[MAX_VEX];Arcnode arcs[MAX_VEX][MAX_VEX];int vex_num, arc_num;Graphkind kind;}AdjMatriax;void createDN(AdjMatriax *G, char *a) {G->arc_num = MAX_ARC;G->vex_num = MAX_VEX;int i, j;for (i = 0; i < G->vex_num; i++) {for (j = 0; j < G->vex_num; j++) {G->arcs[i][j].adj = 0;G->arcs[i][j].info = 65535;}}for (i = 0; i < G->vex_num; i++) {G->vexs[i] = a[i];}int k;int u, v, weight;for (k = 0; k < G->vex_num; k++) {switch (k){case 0: v = 1, u = 2, weight = 2; break;case 1: v = 1, u = 4, weight = 1; break;case 2: v = 2, u = 3, weight = 3; break;case 3: v = 2, u = 5, weight = 4; break;case 4: v = 3, u = 4, weight = 5; break;case 5: v = 3, u = 5, weight = 6; break;default:break;}G->arcs[v - 1][u - 1].adj = 1;G->arcs[v - 1][u - 1].info = weight;G->arcs[u - 1][v - 1].adj = 1;G->arcs[u - 1][v - 1].info = weight;}Graphkind kind = UDN;}void Prim(AdjMatriax *G) {char vex[MAX_VEX];int weight[MAX_VEX];int start = 2;//*************************************设置开始点int i, j, k, m = 0;int min;for (i = 0; i < G->vex_num; i++) {//赋予编号start的权值weight[i] = G->arcs[start][i].info;}weight[start] = 0;//出发点的权值为零vex[m] = G->vexs[start];//出存第一个点for (i = 0; i < G->vex_num-1; i++) {min = 65535;for (j = 0; j < G->vex_num; j++) {if (weight[j] < min&&weight[j] != 0) {//出发点的个链接边的最小权值min = weight[j];k = j;//k记录最小全职的点}}printf("%c 距离最近的点为 %c 距离为%d\n", vex[i], G->vexs[k],min);vex[++m] = G->vexs[k];//vex的下一个点---储存权值最小的点weight[k] = 0;for (j = 0; j < G->vex_num; j++) {if (weight[j] && G->arcs[k][j].info != 65535) {weight[j] = G->arcs[k][j].info;}}}for (i = 0; i < G->vex_num-1; i++) {printf("%c ", vex[i]);}system("pause");}int main(){AdjMatriax *G = (AdjMatriax*)malloc(sizeof(AdjMatriax));char a[6] = "ABCDE";createDN(G, a);Prim(G);return 0;}
阅读全文
0 0
- 新手初学数据结构1 普利姆算法
- 数据结构与算法初学之链表:
- 数据结构与算法初学之栈
- 新手学习数据结构与算法---开始篇
- 新手学习数据结构与算法---冒泡排序
- 新手学习数据结构与算法---快速排序算法
- 新手学习数据结构与算法---二分查找算法
- 初学数据结构
- linux新手初学
- 新手初学存储过程
- 新手初学dom4j(二)
- Python新手初学教程
- Python新手初学教程
- 新手初学sublime text
- 数据结构初学过程中对算法效率度量的理解
- 初学数据结构---二叉树,线索二叉树相关算法
- 新手学习数据结构与算法---直接插入排序
- 新手学习数据结构与算法---直接选择排序
- mybatis传多个参数(不使用@param注解情况下),3.4.2版本之后使用#{0}-#{n}引起的参数绑定异常,以及settings属性中useActualParamName的作用。
- 深度学习权重初始化的原则
- 解决wordpress 更新翻译提示更新成功了,但是刷新一下又提示的问题
- Codechef Consecutive Snakes(三分)
- USACO-Section1.2 Name That Number
- 新手初学数据结构1 普利姆算法
- USACO-Section1.2 Palindromic Squares
- 解决:ORA-01034: ORACLE not available ORA-27101
- [区间DP 22 Halloween Costumes LightOJ
- ubuntu mysql 安装迁移
- 高精度之高精度加减法
- USACO-Section1.4 Arithmetic Progressions[其他][暴力枚举]
- python 数据结构之二叉搜索树
- USACO-Section1.2 Dual Palindromes