yghkdr 发表于 2019-11-27 15:25:46

关于小甲鱼视频中普利姆算法的求助

输出都是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;
}

yghkdr 发表于 2019-11-27 15:52:42

输入:
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]
查看完整版本: 关于小甲鱼视频中普利姆算法的求助