prim求MST

PRIM==>>MST模板

#include <iostream>

using namespace std;
#define typec int
#define V 3
const typec inf=0x3f3f3f3f;
int vis[V];
typec lowc[V];
/*==================================================*\
 | Prim求MST
 | INIT: cost[][]耗费矩阵(inf为无穷大);
 | CALL: prim(cost, n); 返回-1代表原图不连通;
\*==================================================*/
typec prim(typec cost[][V],int n)
{
    int i,j,p;
    typec minc,res=0;
    memset(vis,0,sizeof(vis));
    vis[0]=1;
    for(i=1; i<n; i++) lowc[i]=cost[0][i];
    for(i=1; i<n; i++)
    {
        minc=inf;
        p=-1;
        for(j=0; j<n; j++)
        {
            if(0==vis[j]&&minc>lowc[j])
            {
                minc=lowc[j];
                p=j;
            }
        }
        if(inf==minc) return -1;
        res+=minc;
        vis[p]=1;
        for(j=0; j<n; j++)
            if(0==vis[j]&&lowc[j]>cost[p][j])lowc[j]=cost[p][j];
    }
    return res;
}


int main()
{
    int cost[3][3]= {0,990,692,990,0,179,692,179,0};
    cout << prim(cost,3) << endl;
    return 0;
}

 

 

posted @ 2013-10-24 14:49  西芒xiaoP  阅读(174)  评论(0编辑  收藏  举报