您的位置:首页 > 其它

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

2016-11-24 10:10 260 查看
/*  

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

* All rights reserved.  

* 文件名称:项目1.cbp  

* 作    者:陈晓琳 

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

* 版 本 号:v1.0  

  

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

  

* 输入描述:无  

* 程序输出:测试数据  

*/    

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

测试用图:



代码:

[cpp] view
plain copy

 





#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算法的验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: