Localhost8080

知行合一,自强不息

 

prim算法求MST

贪心,每次加入距离当前MST最近的一个点
//无向图最小生成树,prim算法,邻接阵形式,复杂度O(n^2)
//返回最小生成树的长度,传入图的大小n和邻接阵mat,不相邻点边权inf
//可更改边权的类型,pre[]返回树的构造,用父结点表示,根节点(第一个)pre值为-1
//必须保证图的连通的!
#define MAXN 200
#define inf 1000000000
typedef 
double elem_t;

elem_t prim(
int n,elem_t mat[][MAXN],int* pre)
{
    elem_t min[MAXN],ret
=0;
    
int v[MAXN],i,j,k;
    
for (i=0;i<n;i++)
        min[i]
=inf,v[i]=0,pre[i]=-1;
    
for (min[j=0]=0;j<n;j++)
   {
        
for (k=-1,i=0;i<n;i++)
            
if (!v[i]&&(k==-1||min[i]<min[k]))
                k
=i;
        
for (v[k]=1,ret+=min[k],i=0;i<n;i++)
            
if (!v[i]&&mat[k][i]<min[i])
                min[i]
=mat[pre[i]=k][i];
    }
    
return ret;
}

posted on 2010-10-29 17:43 superKiki 阅读(488) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔档案

文章分类

我的好友

一些常去的网站

搜索

最新评论

阅读排行榜

评论排行榜