首页 > 其他 > 详细

zoj 2966 Build The Electric System

时间:2014-03-31 11:10:51      阅读:476      评论:0      收藏:0      [点我收藏+]

   就是套了个prim算法就ac了

bubuko.com,布布扣
#include <stdio.h>
#include <string.h>
#define MaxInt 0x3f3f3f3f
#define N 510
/*创建map二维数组储存图表,low数组记录每2个点间最小权值,visited数组标记某点是否已访问*/
int map[N][N],low[N],visited[N];
int n;
int prim()
{
    int i,j,pos,min,result=0;
    memset(visited,0,sizeof(visited));
/*从某点开始,分别标记和记录该点*/
    visited[1]=1;pos=1;
/*第一次给low数组赋值*/
    for(i=1;i<=n;i++)
        if(i!=pos) low[i]=map[pos][i];
/*再运行n-1次*/
    for(i=1;i<n;i++)
    {
/*找出最小权值并记录位置*/
     min=MaxInt;
     for(j=1;j<=n;j++)
         if(visited[j]==0&&min>low[j])
         {
             min=low[j];pos=j;
         }
/*最小权值累加*/
    result+=min;
/*标记该点*/
    visited[pos]=1;
/*更新权值*/
    for(j=1;j<=n;j++)
        if(visited[j]==0&&low[j]>map[pos][j])
            low[j]=map[pos][j];
    }
    return result;
}
 
int main()
{
    int i,v,j,ans,s,e,t,m;
       scanf("%d",&t);
       while(t--)
       {
           scanf("%d%d",&n,&m);
           /*所有权值初始化为最大*/
        memset(map,MaxInt,sizeof(map));
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%d",&s,&e,&v);
            map[s+1][e+1]=map[e+1][s+1]=v;
        }
        ans=prim();
        printf("%d\n",ans);    
    }
    return 0;
}
bubuko.com,布布扣

zoj 2966 Build The Electric System,布布扣,bubuko.com

zoj 2966 Build The Electric System

原文:http://www.cnblogs.com/woshijishu3/p/3634293.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!