鱼C论坛

 找回密码
 立即注册
查看: 2433|回复: 1

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

[复制链接]
发表于 2019-11-27 15:25:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输出都是0,不知道错哪了,请指教!
代码如下:
#include<bits/stdc++.h>
using namespace std;

#define MAXVEX 100
#define INFINITY 65535

typedef struct{
        char vexs[MAXVEX];  //顶点表
        int arc[MAXVEX][MAXVEX];  //邻接矩阵
        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[i];
        }
       
        //初始化邻接矩阵
        for(i=0;i<G->numVertexes;i++)
        {
                for(j=0;j<G->numVertexes;j++)
                {
                        G->arc[i][j]=INFINITY;
                }
        }
       
        for(k=0;k<G->numEdges;k++)
        {
                //输入点,点和对应的权值
                cin>>i>>j>>w;
                G->arc[i][j]=w;
                G->arc[j][i]=w;
        }
}
void MiniSpanTree_Prim(MGraph G)
{
        int min,i,j,k;
        int adjvex[MAXVEX];  //保存相关顶点下标
        int lowcost[MAXVEX]; //保存相关顶点间边的权值
       
        lowcost[0]=0;  //v0作为最小生成树的根开始遍历,权值为0
        adjvex[0]=0;  //v0第一个加入
       
        //初始化操作 将邻接矩阵第0行所有权值先加入数组
        for(i=1;i<G.numVertexes;i++)
        {
                lowcost[i]=G.arc[0][i];
                adjvex[i]=0;  //初始化全部为v0的下标       
        }
       
        //真正构建最小生成树的过程
        for(i=1;i<G.numVertexes;i++)
        {
                min=INFINITY;
                j=1;
                k=0;
               
                //遍历全部顶点
                while(j<G.numVertexes)
                {
                        //找出lowcost数组已存储的最小权值
                         if(lowcost[j]!=0&&lowcost[j]<min)
                         {
                                 min=lowcost[j];
                                 k=j;  //将发现的最小权值的下标存入k,以待使用
                         }
                         j++;
                }
               
                //打印当前顶点边中权值最小的边
                cout<<adjvex[k]<<k<<endl;
                lowcost[k]=0;  //将当前顶点的权值设置为0,表示此顶点已经完成任务,进行下一个顶点的遍历
               
                //邻接矩阵k逐个遍历全部顶点
                for(j=1;j<G.numVertexes;j++)
                {
                        if(lowcost[j]!=0&&G.arc[k][j]<lowcost[j])
                        {
                                lowcost[j]=G.arc[k][j];
                                adjvex[j]=k;
                        }
                }
        }
}

int main()
{
        MGraph G;
        CreateMGraph(&G);
        MiniSpanTree_Prim(G);
        return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表