POJ1258 Agri-Net 最小生成树

裸的最小生成树


实现代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define INF 999999999
#define MAX 505
int map[MAX][MAX];
bool s[MAX];
int dist[MAX];
int n;
int prime()
{
    memset(s,false,sizeof(s));
    for(int i=1;i<=n;i++)
      dist[i]=map[1][i];
    s[1]=true;
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        int tmp=INF;
        int u=1;
        for(int j=1;j<=n;j++)
          if(!s[j]&&dist[j]<tmp)
          {
              tmp=dist[j];
              u=j;
          }
        s[u]=true;
        sum+=dist[u];
        for(int j=1;j<=n;j++)
          if(!s[j]&&dist[j]>map[u][j])
            dist[j]=map[u][j];
    }
    return sum;
}
int main()
{
    while(scanf("%d",&n)!=-1)
    {
        for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
            scanf("%d",&map[i][j]);
        printf("%d\n",prime());
    }
    return 0;
}


你可能感兴趣的:(POJ1258 Agri-Net 最小生成树)