hiho第二十六週

最小生成樹之Prim算法

代碼如下:

#include <bits/stdc++.h>
#define maxn 1005
using namespace std;
#define INF 0x3f3f3f3f
int lowcost[maxn], n, a[maxn][maxn];
int Prim(){
    int ans = 0, tmp;
    lowcost[0] = 0;
    for ( int i = 1; i < n; i++){
        lowcost[i] = a[0][i];
    }
    for ( int i = 1; i < n; i++){
        int m = INF;
        for ( int j = 0; j < n; j++){
            if ( m > lowcost[j] && lowcost[j] != 0){
                m = lowcost[j];
                tmp = j;
            }
        }
        ans += m;
        lowcost[tmp] = 0;
        for ( int j = 0; j < n; j++){
            if ( lowcost[j] > a[tmp][j])
                lowcost[j] = a[tmp][j];
        }
    }
    return ans;
}
int main()
{
    scanf( "%d", &n);
    for ( int i = 0; i < n; i++){
        for ( int j = 0; j < n; j++){
            scanf( "%d", &a[i][j]);
        }
    }
    printf( "%d\n", Prim());
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章