最小生成树普里姆算法,求指错#include#define MAX 50typedef struct{ /*图的结构体*/int vex[MAX]; /*顶点数组*/int vexnum,arcnum; /*顶点数与边数*/int weight[MAX][MAX]; /*邻接矩阵——权值*/}MGraph;typedef struct{ /*辅助
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/16 06:04:17
最小生成树普里姆算法,求指错#include#define MAX 50typedef struct{ /*图的结构体*/int vex[MAX]; /*顶点数组*/int vexnum,arcnum; /*顶点数与边数*/int weight[MAX][MAX]; /*邻接矩阵——权值*/}MGraph;typedef struct{ /*辅助
最小生成树普里姆算法,求指错
#include
#define MAX 50
typedef struct{ /*图的结构体*/
int vex[MAX]; /*顶点数组*/
int vexnum,arcnum; /*顶点数与边数*/
int weight[MAX][MAX]; /*邻接矩阵——权值*/
}MGraph;
typedef struct{ /*辅助数组*/
int adjvex;
int lowcost;
}closedge[MAX];
int mininum(closedge close,MGraph G) /*最小权值顶点查找*/
{
int i=0,j,k,min;
while(close[i].lowcost==0)
\x05i++;
min=close[i].lowcost;
k=i;
for(j=i+1;j0&&min>close[j].lowcost)
\x05{
\x05 min=close[j].lowcost;
\x05 k=j;
\x05}
return k;
}
void PRIM(MGraph G,int u) /*普里姆函数体*/
{
int i,j,k;
closedge close;
k=u;
for(j=0;j
最小生成树普里姆算法,求指错#include#define MAX 50typedef struct{ /*图的结构体*/int vex[MAX]; /*顶点数组*/int vexnum,arcnum; /*顶点数与边数*/int weight[MAX][MAX]; /*邻接矩阵——权值*/}MGraph;typedef struct{ /*辅助
我改了一下这些地方
程序成功运行并输出边了.
void CreatUDN(MGraph G) 改为void CreatUDN(MGraph &G)
原因,函数里面进行处理的,实际上只是main函数中G的一个副本.这是函数调用时,“形参”与“实参”的区别.实际上处理输入操作的,只是函数里面的临时变量,而不是main里面真正的G.加上&,就表示每次对G的操作,都会去寻找G所在的存储地址进行操作.故这样可以实现直接访问main中的G
printf("\tWelcom to use this program!\n");这句之前,我将G中各数据项全部置0.实际上需要置0的只有矩阵,因为另外那几个数据都有输入操作.原因是,G是main的局部变量.局部变量在创建的时候,若不赋初值,系统会给予一个随机值,而不是0.这些随机值会对生成树算法的计算造成影响.其实,就是没边时突然间“随机”了一些边上去.