Agri-Net

http://poj.org/problem?id=1258

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 #define MAXN 110

 5 

 6 const int INF=1<<28;

 7 using namespace std;

 8 int g[MAXN][MAXN];

 9 int dis[MAXN];

10 bool vis[MAXN];

11 int n,sum;

12 bool sprim()

13 {

14     memset(vis,false,sizeof(vis));

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

16         dis[i]=INF;

17     dis[1]=0;sum=0;

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

19     {

20         int min=INF,k=0;

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

22         {

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

24             {

25                 min=dis[j];

26                 k=j;

27             }

28         }

29         if(min==INF) return false;

30         vis[k]=true;

31         sum+=min;

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

33         {

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

35             {

36                 dis[j]=g[k][j];

37             }

38         }

39     }

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

41     return true;

42 }

43 int main()

44 {

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

46 

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

48        {

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

50            {

51                scanf("%d",&g[i][j]);

52            }

53        }

54        sprim();

55     }

56     return 0;

57 

58 }
View Code

 

你可能感兴趣的:(net)