prim算法最小生成树(优化)

#include <iostream>
using namespace std;
const int maxn = 1000;
int f[maxn]={0};
int n,e;
int a[maxn][maxn]={0};
void prim(int v0) {
    int cost[maxn];
    for (int i=0;i<n;i++) cost[i]=1000000;
    for (int i=1;i<n;i++) if (a[v0][i]) cost[i]=a[v0][i];
    f[v0]=1;
    int pos;
    int ans=0;
    for (int k=1;k<n;k++) {
        int mini=1000000;
        for (int i=0;i<n;i++) {
            if (cost[i]<mini && !f[i]) {
                mini=cost[i];
                pos=i;
            }
        }
        f[pos]=1;ans += cost[pos];
        for (int i=0;i<n;i++) {
            if (!f[i] && a[pos][i] && a[pos][i]<cost[i]) {
                cost[i] = a[pos][i];
            }
        }
    }
}
int main () {
    cin >> n >> e;
    for (int i=0;i<e;i++) {
        int p,q;
        cin >> p >> q;
        cin >> a[p][q];
        a[q][p]=a[p][q];
    }
    prim(1);
}

 

posted @ 2014-02-21 10:07  闪光阳  阅读(332)  评论(0编辑  收藏  举报