对Prim算法求最小生成树(MST)有深入的了解

今晚刷了一道POJ的最小生成树水题,点击打开题目链接,同时对Prim算法有了更加深入的了解。

我所用的Prim算法如下:

/*==================================================*\ 
| Prim 求MST 
| INIT: cost[][]耗费矩阵(inf为无穷大,表示两个顶点之间不连通,(u,v)不属于E); 
| CALL: prim(cost, n); 返回-1代表原图不连通; 
\*==================================================*/  
#define typec int // type of cost  
const typec inf = 0x3f3f3f3f; // max of cost  
int vis[V]; typec lowc[V];  
typec prim(typec cost[][V], int n){ // vertex: 0 ~ n-1  
    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;   //返回最小权值和  
}  

cost[][]是权值(暂且认为是边的权值),今天学到了一些知识就是在对cost[][j]赋值方面,如果i==j && cost[i][j] ==0 那么这条边(尽管权值为0,权值>0)不会加入到MST中,但如果i!=j && cost[i][j]==0 ,那么这条边(尽管权值为0,权值>0)则会加入到MST中。

猜想:如果将cost[i][j]的值赋成负值,是不是会在关于最小生成树方面求解更方便呢??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值