第十三周项目一(Prim算法的验证和Kruskal算法的验证)
来源:互联网 发布:淘宝联盟好用吗 编辑:程序博客网 时间:2024/06/06 03:35
问题及代码:
*Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:Prim算法的验证和Kruskal算法的验证.cpp *作者:宋雨静
*时间:11月24日 *版本号;v1.0 *问题描述: Prim算法的验证和Kruskal算法的验证 *输入描述:带权图的邻接矩阵 *程序输出:最小生成树各边的权 / [cpp] view plain copy#include <stdio.h> #include <malloc.h> #define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示∞ typedef int InfoType; //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息,在此存放带权图权值 } VertexType; //顶点类型 typedef struct //图的定义 { int edges[MAXV][MAXV]; //邻接矩阵 int n,e; //顶点数,弧数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型 //以下定义邻接表类型 typedef struct ANode //弧的结点结构类型 { int adjvex; //该弧的终点位置 struct ANode *nextarc; //指向下一条弧的指针 InfoType info; //该弧的相关信息,这里用于存放权值 } ArcNode; typedef int Vertex; typedef struct Vnode //邻接表头结点的类型 { Vertex data; //顶点信息 int count; //存放顶点入度,只在拓扑排序中用 ArcNode *firstarc; //指向第一条弧 } VNode; typedef VNode AdjList[MAXV]; //AdjList是邻接表类型 typedef struct { AdjList adjlist; //邻接表 int n,e; //图中顶点数n和边数e } ALGraph; //图的邻接表类型 void ArrayToMat(int *Arr, int n, MGraph &g); void Prim(MGraph g,int v); void ArrayToMat(int *Arr, int n, MGraph &g) { int i,j,count=0; //count用于统计边数,即矩阵中非0元素个数 g.n=n; for (i=0; i<g.n; i++) for (j=0; j<g.n; j++) { g.edges[i][j]=Arr[i*n+j]; //将Arr看作n×n的二维数组,Arr[i*n+j]即是Arr[i][j],计算存储位置的功夫在此应用 if(g.edges[i][j]!=0) count++; } g.e=count; } void Prim(MGraph g,int v) { int lowcost[MAXV]; //顶点i是否在U中 int min; int closest[MAXV],i,j,k; for (i=0; i<g.n; i++) //给lowcost[]和closest[]置初值 { lowcost[i]=g.edges[v][i]; closest[i]=v; } for (i=1; i<g.n; i++) //找出n-1个顶点 { min=INF; for (j=0; j<g.n; j++) //在(V-U)中找出离U最近的顶点k if (lowcost[j]!=0 && lowcost[j]<min) { min=lowcost[j]; k=j; //k记录最近顶点的编号 } printf(" 边(%d,%d)权为:%d\n",closest[k],k,min); lowcost[k]=0; //标记k已经加入U for (j=0; j<g.n; j++) //修改数组lowcost和closest if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j]) { lowcost[j]=g.edges[k][j]; closest[j]=k; } } } int main() { MGraph g; int A[6][6]= { {0,6,1,5,INF,INF}, {6,0,5,INF,3,INF}, {1,5,0,5,6,4}, {5,INF,5,0,INF,2}, {INF,3,6,INF,0,6}, {INF,INF,4,2,6,0} }; ArrayToMat(A[0], 6, g); printf("最小生成树构成:\n"); Prim(g,0); return 0; }运行结果:
0 0
- 第十三周项目一(Prim算法的验证和Kruskal算法的验证)
- 第十三周项目一(Prim算法的验证和Kruskal算法的验证)
- 第十三周项目一~~Prim算法的验证和Kruskal算法的验证
- 第十三周项目1Prim算法的验证和Kruskal算法的验证
- 第十三周【项目一 (1,2)Prim算法和Kruskal算法验证】
- 第十三周项目一(2)~~Kruskal算法的验证
- 第十三周项目一(1)Prim算法的验证
- 第十三周项目一Kruskal算法的验证 .
- 第十三周项目一:prim算法的验证
- 第十三周 项目一 - prim算法的验证
- 第十三周【项目一-Prim算法的验证】
- 第十三周项目一-Prim算法的验证
- 第十三周 项目一-验证Prim算法
- 【Prim算法和Kruskal算法的验证】
- 第十三周 项目1(2) kruskal算法的验证
- 第十三周项目二(Kruskal算法的验证)
- (第十三周项目2)Kruskal算法的验证
- 第十三周项目二(Kruskal算法的验证)
- 第9周项目3-(1)稀疏矩阵的三元组表示的实现及应用
- 实验二--任务一--打招呼
- Spring注解方式防止表单重复提交
- jcifs- 读取网络共享文件图片资源
- Testing Storage Spaces Direct using Dell PowerEdge R730xd
- 第十三周项目一(Prim算法的验证和Kruskal算法的验证)
- 如何设置默认输入法
- leetcode 447. Number of Boomerangs
- 简谈我所理解的面向对象
- Information-Centric Network
- TCP、UDP、IP 协议分析
- Spring4 定时任务
- Android 内部跳转URi协议的定义和实现方案
- 第十周 项目三-利用二叉树遍历思想解决问题