码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1102 Constructing Roads (最小生成树)

时间:2015-05-27 13:54:36      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

Prim算法求最小生成树
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=110;
const int INF=0x3f3f3f3f;

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

void Prim(){
    int i;
    for(i=1;i<=n;i++){
        dis[i]=map[1][i];
        vis[i]=0;
    }
    dis[1]=0;
    vis[1]=1;
    int j,k,tmp;
    for(i=1;i<=n;i++){
        tmp=INF;
        for(j=1;j<=n;j++)
        if(!vis[j]&&tmp>dis[j]){
            k=j;
            tmp=dis[j];
        }
        if(tmp==INF) break;
        vis[k]=1;
        ans+=dis[k];
        for(j=1;j<=n;j++)
            if(!vis[j]&&dis[j]>map[k][j])
            dis[j]=map[k][j];
    }
}
int main()
{
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            scanf("%d",&map[i][j]);
        int q,a,b;
        scanf("%d",&q);
        while(q--){
            scanf("%d%d",&a,&b);
            map[a][b]=map[b][a]=0;
        }
        ans=0;
        Prim();
        printf("%d\n",ans);
    }
    return 0;
}

HDU1102 Constructing Roads (最小生成树)

标签:

原文地址:http://blog.csdn.net/a197p/article/details/46045793

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!