poj 1258

#include<stdio.h>

#define max 999999

#define N 1000

int dis[N],vis[N],map[N][N];

int sum,n;

void prim(int x)

{



    int i,j,k;

    for(i=0;i<n;i++)

    {

        dis[i]=map[x][i];

        vis[i]=0;

    }

    vis[x]=1;

    dis[x]=0;

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

    {

        int min=max;

        for(j=0;j<n;j++)

        {

            if(!vis[j]&&dis[j]<min)

            {

                min=dis[j];

                k=j;

            }

        }

        vis[k]=1;

        sum+=min;





        for(j=0;j<n;j++)

        {

            if(!vis[j]&&dis[j]>map[k][j])

            {

                dis[j]=map[k][j];

            }

        }

    }

}

int main()

{

    int t,i,j,b;



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

    {





        for(i=0;i<n;i++)

        {

            for(j=0;j<n;j++)

            {

                scanf("%d",&b);

                map[i][j]=b;

            }

        }



        sum=0;

        prim(0);

        printf("%d\n",sum);



    }





}

  

你可能感兴趣的:(poj)