关于小甲鱼视频中普利姆算法的求助
输出都是0,不知道错哪了,请指教!代码如下:
#include<bits/stdc++.h>
using namespace std;
#define MAXVEX 100
#define INFINITY 65535
typedef struct{
char vexs;//顶点表
int arc;//邻接矩阵
int numVertexes,numEdges;//图中当前的顶点数和边数
}MGraph;
//建立无向网图的邻接矩阵
void CreateMGraph(MGraph*G)
{
int i,j,k,w;
cin>>G->numVertexes>>G->numEdges;
//输入顶点
for(i=0;i<G->numVertexes;i++)
{
cin>>G->vexs;
}
//初始化邻接矩阵
for(i=0;i<G->numVertexes;i++)
{
for(j=0;j<G->numVertexes;j++)
{
G->arc=INFINITY;
}
}
for(k=0;k<G->numEdges;k++)
{
//输入点,点和对应的权值
cin>>i>>j>>w;
G->arc=w;
G->arc=w;
}
}
void MiniSpanTree_Prim(MGraph G)
{
int min,i,j,k;
int adjvex;//保存相关顶点下标
int lowcost; //保存相关顶点间边的权值
lowcost=0;//v0作为最小生成树的根开始遍历,权值为0
adjvex=0;//v0第一个加入
//初始化操作 将邻接矩阵第0行所有权值先加入数组
for(i=1;i<G.numVertexes;i++)
{
lowcost=G.arc;
adjvex=0;//初始化全部为v0的下标
}
//真正构建最小生成树的过程
for(i=1;i<G.numVertexes;i++)
{
min=INFINITY;
j=1;
k=0;
//遍历全部顶点
while(j<G.numVertexes)
{
//找出lowcost数组已存储的最小权值
if(lowcost!=0&&lowcost<min)
{
min=lowcost;
k=j;//将发现的最小权值的下标存入k,以待使用
}
j++;
}
//打印当前顶点边中权值最小的边
cout<<adjvex<<k<<endl;
lowcost=0;//将当前顶点的权值设置为0,表示此顶点已经完成任务,进行下一个顶点的遍历
//邻接矩阵k逐个遍历全部顶点
for(j=1;j<G.numVertexes;j++)
{
if(lowcost!=0&&G.arc<lowcost)
{
lowcost=G.arc;
adjvex=k;
}
}
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
MiniSpanTree_Prim(G);
return 0;
}
输入:
6 10
1 2 3 4 5 6
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
页:
[1]