您的位置:首页 > 其它

【第十三周 项目1-Prim算法的验证】

2016-11-24 10:11 330 查看
问题及代码:

/*

* Copyright (c)2015级,烟台大学 计算机与控制工程学院

* All rights reserved.

* 文件名称:项目1.cpp

* 作    者:胡馨月

* 完成日期:2016年11月24日

* 版 本 号:v1.0

* 问题描述:Prim算法的验证

* 输入描述:无

* 程序输出:测试数据

*/  头文件及功能函数见【图算法库】

测试用图:



 

 #include "graph.h" 

 

void Prim(MGraph g,int v) 



    int lowcost[MAXV];          //顶点i是否在U中 

    int min; 

    int closest[MAXV],i,j,k; 

    for (i=0; i<g.n; i++)           //给lowcost[]和closest[]置初值 

    { 

        lowcost[i]=g.edges[v][i]; 

        closest[i]=v; 

    } 

    for (i=1; i<g.n; i++)           //找出n-1个顶点 

    { 

        min=INF; 

        for (j=0; j<g.n; j++)     //在(V-U)中找出离U最近的顶点k 

            if (lowcost[j]!=0 && lowcost[j]<min) 

            { 

                min=lowcost[j]; 

                k=j;            //k记录最近顶点的编号 

            } 

        printf(" 边(%d,%d)权为:%d\n",closest[k],k,min); 

        lowcost[k]=0;           //标记k已经加入U 

        for (j=0; j<g.n; j++)       //修改数组lowcost和closest 

            if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j]) 

            { 

                lowcost[j]=g.edges[k][j]; 

                closest[j]=k; 

            } 

    } 



 

int main() 



    MGraph g; 

    int A[6][6]= 

    { 

        {0,10,INF,INF,19,21}, 

        {10,0,5,6,INF,11}, 

        {INF,5,0,6,INF,INF}, 

        {INF,6,6,0,18,14}, 

        {19,INF,INF,18,0,33}, 

        {21,11,INF,14,33,0} 

    }; 

    ArrayToMat(A[0], 6, g); 

    printf("最小生成树构成:\n"); 

    Prim(g,0); 

    return 0; 



运行截图:



知识点总结:

Prim算法的验证

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: