【裸最小生成树】 模板 poj 1258

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

#define MAX 102

void read();

using namespace std;

int map[MAX][MAX],best[MAX],n;

bool visit[MAX];

int main()

{

    //freopen("in.txt","r",stdin);

    while(scanf("%d",&n)!=EOF)

    {

        memset(visit,false,sizeof(visit));

        read();

        int ans=0,k;

        for(int i=1;i<=n;i++)

        {

            best[i]=map[1][i];

        }

        visit[1]=true;

        while(1)

        {

            int min=1 << 30;

            k=0;

            for(int i=1;i<=n;i++)

            {

                if(!visit[i] && best[i]<min)

                {

                    min=best[i];

                    k=i;

                }

            }

            if(k==0)break;

            ans+=min;

            visit[k]=true;

            for(int i=1;i<=n;i++)

            {

                if(!visit[i] &&map[k][i]<best[i])

                {

                    best[i]=map[k][i];

                }

            }

        }

         cout << ans << endl;

    }

    return 0;

}

void read()

{

    for(int i=1;i<=n;i++)

    {

        for(int j=1;j<=n;j++)

        {

            scanf("%d",&map[i][j]);//输入邻接矩阵

        }

    }

}

 

你可能感兴趣的:(最小生成树)