poj 1287 Networking

题目链接http://poj.org/problem?id=1287

题目分类:最小生成树

代码:

//#include<bits/stdc++.h>
#include<stdio.h>
#include<string.h>
#include<iostream>

using namespace std;
const int V=200;
#define INF 0x3f3f3f3f

int cost[V][V];
int mincost[V];
bool used[V];
int v;

int prim()
{
    for(int i=0;i<v;i++)
    {
        mincost[i]=INF;
        used[i]=0;
    }
    mincost[0]=0;
    int res=0;

    while(1)
    {
        int vv=-1;
        for(int u=0;u<v;u++)
        {
            if(!used[u]&&(vv==-1||mincost[u]<mincost[vv]))
                vv=u;
        }

        if(vv==-1) break;
        used[vv]=1;
        res+=mincost[vv];
        for(int u=0;u<v;u++)
            mincost[u]=min(mincost[u],cost[vv][u]);
    }
    return res;
}

int main()
{
    int a,b,m,c;
    while(scanf("%d",&v)&&v)
    {
        for(int i=0;i<=v;i++)
        {
            for(int j=0;j<=v;j++)
            {
                cost[i][j]=INF;
            }
            cost[i][i]=0;
        }
        scanf("%d",&m);
        while(m--)
        {
            scanf("%d %d %d",&a,&b,&c);
            cost[a-1][b-1]=min(c,cost[a-1][b-1]);
            cost[b-1][a-1]=min(c,cost[b-1][a-1]);
        }
        int ans=prim();
        printf("%d\n",ans);
    }

    return 0;
}

 

posted @ 2015-11-05 00:08  Gssol  阅读(125)  评论(0编辑  收藏  举报