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

问题及代码

/* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:项目1.cbp 作 者:张耀 完成日期:2015年11月30日 版 本 号: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;  
}

【第13周 项目1 - Prim算法的验证】_第1张图片

运行结果

【第13周 项目1 - Prim算法的验证】_第2张图片

知识点总结:

Prim算法的验证。

学习心得:

Prim算法的验证需要搞懂离不开画图,在纸上模拟程序的一步步实现,搞懂这个算法的lowcost与closet数组的变化过程。

你可能感兴趣的:(【第13周 项目1 - Prim算法的验证】)