最小生成树 prime 算法

本文深入探讨了图论中的最小生成树问题,并重点介绍了Prim算法的原理和实现步骤。通过实例解析,展示了如何使用Prim算法求解图的最小生成树,帮助读者理解和掌握这一经典算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<queue>
#include<iostream>
using namespace std; 
const int MAXN = 1000 ; 
int used[MAXN] = { 0 }; 
int G[MAXN][MAXN] = {0} ; 
struct Node {
    int s,e ,cost ; 
    bool operator()(const Node &a,const Node&b ) {
        return a.cost > b.cost ; 
    }
}; 
/**
bool operator<(const Node &a,const Node&b ) {
    return a.cost > b.cost ; 
}
priority_queue<Node> qe ; 
*/
int minimal_cost(int G[][MAXN],int N){
    priority_queue<Node,vector<Node>,Node> qe ; 
    int p = 0 ; 
    int mcost = 0 ; 
    while(true) {
        used[p]  = 1  ; 
        for(int i = 0 ; i< N ; i++){
            if(used[i] == 0 ) {
                qe.push((Node){p,i,G[p][i]}) ; 
            }
        }
        //find the unused one 
        
        while(!qe.empty()){
            Node node = qe.top() ;qe.pop() ;
            if ( used[node.e] == 0 ) {
                mcost += node.cost ;
                p = node.e ; 
                break; 
            }
        }

        if (qe.empty()) break; 

    }
    return mcost ; 
}
int main(){
    G[0][1] = 2 ; G[1][0] = 2 ;
    G[1][2] = 3 ; G[2][1] = 3 ; 
    G[0][2] = 4;  G[2][0] = 4 ;
    int cost = minimal_cost(G , 3 ) ; 
    cout<<cost<<endl ;
    system("pause");   
}

如上 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值