andre_joy

导航

poj 1258

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

题意:把所有农场连起来的最小费用。

mark:最简单的最小生成树。第一次写,代码比较乱~

代码:

#include <stdio.h>
#include <string.h>

const int N = 110;
const int MAX = 100010;
int vis[N],dis[N];
int a[N][N];

int min(int a, int b) {return a < b ? a : b;}

int main()
{
    int n,ans,min1,f,sum;
    int i,j,k;
    while(~scanf("%d", &n))
    {
        for(i = 0; i < n; i++)
        {
            dis[i] = MAX;
            for(j = 0; j < n; j++)
                scanf("%d", &a[i][j]);
        }
        memset(vis, 0, sizeof(vis));
        ans = n;
        sum = 0;
        vis[0] = 1;
        f = 0;
        while(--ans)
        {
            i = f;
            min1 = MAX;
            for(j = 0; j < n; j++)
            {
                if(vis[j]) continue;
                dis[j] = min(dis[j], a[i][j]);
                if(min1 > dis[j])
                {
                    min1 = dis[j];
                    f = j;
                }
            }
            vis[f] = 1;
            sum += min1;
        }
        printf("%d\n", sum);
    }
    return 0;
}

posted on 2012-07-26 10:55  andre_joy  阅读(101)  评论(0编辑  收藏  举报