poj 1258 agri-net

裸的最小生成树

prime算法比较方便


#include <iostream>
#include <memory.h>
using namespace std;
const int IN = (1<<28);
int G[105][105];
int locost[105];
int N,M,Cost,flag;
void Prime()
{
    locost[1] = 0;
    for( int i = 1; i <= N; i++ )
        locost[i] = G[1][i];
    for( int u = 1; u < N; u++ )
    {
        int MinV = 0, Min = IN;
        for( int i = 1; i <= N; i++ )
            if( locost[i] && locost[i] < Min )
        {
            MinV = i;
            Min = locost[i];
        }
        if( !MinV )
            break;
        else
        {
            Cost += Min;
            locost[MinV] = 0;
            for( int i = 1; i <= N; i++ )
            {
                if( locost[i] && locost[i] > G[MinV][i] )
                {
                    locost[i] = G[MinV][i];
                }
            }
        }
    }
}
int main()
{
    while( cin >> N )
    {
        memset(G, 0, sizeof(G));
        memset(locost, 0, sizeof(locost));
        for( int i = 1; i <= N; i++ )
            for( int j = 1; j <= N; j++ )
        {
            if( i==j )
                G[i][j] = 0;
            else
                G[i][j] = IN;
        }
        for( int i = 1; i <= N; i++ )
            for( int j = 1; j <= N; j++ )
            cin >> G[i][j];
        Cost = 0;
        Prime();
        cout << Cost << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xutian_curry/article/details/80217576