作者:手机用户2602897411 | 来源:互联网 | 2023-10-11 18:47
用prim算法的思想,用C语言编写出最小生成树的方法的代码Pri数据结构Prim和Kruskal最小生成树的代码怎么写?将城市看成是点,城市之间的距离看成是点之间的权值。下面是PR
用prim算法的思想,用C语言编写出最小生成树的方法的代码
Pri
数据结构 Prim和Kruskal最小生成树 的代码怎么写?
将城市看成是点,城市之间的距离看成是点之间的权值。下面是PRIM算法实现的最小生成树代码。
,利用邻接矩阵存储边的信息。
程序已通过编译了,可以直接运行。#include #include typedef int VRType;typedef char InfoType;#define MAX_NAME 3/*顶点字符串的最大长度+1*/#define MAX_INFO 20/*相关信息字符串的最大长度+1*/typedef char VertexType[MAX_NAME];#define INFINITY 32767/*用整型最大值代替无穷大*/#define MAX_VERTEX_NUM 20/*最大顶点个数*/typedef enum GraphKind;/**/typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef int ShortPathTable[MAX_VERTEX_NUM];typedef struct{ VRType adj; /*顶点关系类型。
Prim算法c语言表示,求源程序。。。。。。。。。
我原来自己写的模板//朴素prim算法//复杂度O(n^2)//flag[SIZE]顶点标记//mindis[SIZE]当前最短距离//dis[SIZE][SIZE]任意两点间距离邻接矩阵表示intprim(){memset(flag,false,sizeof(bool)*(n+1));flag[0]=true;for(inti=1;i
mindis[j]){min=mindis[j];pos=j;}}ans+=min;flag[pos]=true;for(intj=1;jdis[pos][j])mindis[j]=dis[pos][j];}}returnans;}c++求最小生成树prim算法,我捣鼓2天了,真心不会改了,求指导感激不尽啊
你的代码太乱,给你这个,添加了注释,容易看懂:
#include#include#includeusing namespace std;#define MAX_VERTEX_NUM 20#define OK 1#define ERROR 0#define MAX 1000typedef struct Arcell{ double adj;}Arcell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct{ char vexs[MAX_VERTEX_NUM]; //节点数组 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前节点数和弧数}MGraph;typedef struct Pnode //用于普利姆算法{ char adjvex; //节点 double lowcost; //权值}Pnode,Closedge[MAX_VERTEX_NUM]; //记录顶点集U到V-U的代价最小的边的辅助数组定义typedef struct Knode //用于克鲁斯卡尔算法中存储一条边及其对应的2个节点{ char ch1; //节点1 char ch2; //节点2 double value;//权值}Knode,Dgevalue[MAX_VERTEX_NUM];//-------------------------------------------------------------------------------int CreateUDG(MGraph & G,Dgevalue & dgevalue);int LocateVex(MGraph G,char ch);int Minimum(MGraph G,Closedge closedge);void MiniSpanTree_PRIM(MGraph G,char u);void Sortdge(Dgevalue & dgevalue,MGraph G);//-------------------------------------------------------------------------------int CreateUDG(MGraph & G,Dgevalue & dgevalue) //构造无向加权图的邻接矩阵{ int i,j,k; cout<<"请输入图中节点个数和边/弧的条数:"; cin>>G.vexnum>>G.arcnum; cout<<"请输入节点:"; for(i=0;i>G.vexs[i]; for(i=0;i> dgevalue[k].ch1 >> dgevalue[k].ch2 >> dgevalue[k].value; i = LocateVex(G,dgevalue[k].ch1); j = LocateVex(G,dgevalue[k].ch2); G.arcs[i][j].adj = dgevalue[k].value; G.arcs[j][i].adj = G.arcs[i][j].adj; } return OK;}int LocateVex(MGraph G,char ch) //确定节点ch在图G.vexs中的位置{ int a ; for(int i=0; i>u; cout<<"构成最小代价生成树的边集为:\n"; MiniSpanTree_PRIM(G,u);}Python中prim算法或kruscal算法的实现
kru