借鉴dijstra写的prim算法

原创 2015年11月20日 21:07:46

在挑战程序设计竞赛那本书上看prim代码,总感觉别扭,而我又不喜欢那种代码方式,比较喜欢dijstra采用优先队列的顺序,所以就自己写了一个用优先队列的prim算法,用于日后使用。


贴代码:


#include <cstdio>
#include <iostream>
#include <queue>
#include <utility>
#include <cstring>
#include <string>
#include <vector>

using namespace std;

int N,M;//N个点,M个边
const int V_MAX = 100;
const int INF = 1<<31 - 1;

typedef struct edge
{
    int to, cost;
    edge(int a, int b){
        to = a;
        cost = b;
    }
}edge;
typedef pair<int ,int> P;

vector<edge > G[V_MAX];
int used[V_MAX];

int prim()
{
    int sum = 0;
    priority_queue<P, vector<P>, greater<P> > pque;
    pque.push(P(0,1));

    while(!pque.empty())
    {
        P temp = pque.top();
        pque.pop();
        int V = temp.second;
        int cos = temp.first;
        if(used[V])continue;
        sum += cos;
        used[V] = 1;
        for(int i=0; i<G[V].size(); i++)
        {
            edge e = G[V][i];
            pque.push(P(e.cost, e.to));
        }
    }
    return sum;
}

int main()
{
    scanf("%d%d",&N,&M);
    for(int i=0; i<M; i++)
    {
        int fir,sec,thi;
        scanf("%d%d%d",&fir, &sec, &thi);
        G[fir].push_back(edge(sec,thi));
        G[sec].push_back(edge(fir,thi));
    }
    cout << prim() << endl;
}

该代码,仅测一份数据,且点的最大数为99

版权声明:虽然为本人原创,但是写得真是渣,想转就转,反正我也不是鸣人。

相关文章推荐

最短生成树的Prim算法

  • 2013-05-14 20:59
  • 1.28MB
  • 下载

一步一步写算法(之prim算法 上)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】     前面我们讨论了图的创建、添加、删除和保存等问题。今天我们将继续讨论图的一些其...

最小生成树:Prim算法

prim算法两种实现方法

顶点为:A,B,C,D,E,F    具体顶点的组成结构可以参考:数据结构(严蔚敏版)的图 第一种:贪心法 #include #define N 6 #define M 9999 //代表不...

最小生成树(Prim算法)

poj 1251 最小生成树 prim算法

The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)