博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
暑假集训(3)第一弹 -----还是畅通工程(hdu1233)
阅读量:4315 次
发布时间:2019-06-06

本文共 1312 字,大约阅读时间需要 4 分钟。

题意梗概:N(n<100)个村子想要富起来,自然就要先修路,不过到底还是没富起来,所以陷入了一个怪圈 :资金不足->修不起路->资金不足......

为了实现走向全民小康社会,全面实现三个现代化,坚持党的四项......咳咳,总之,你作为一名红领巾,需要提供一种花费最少(即路径最短),又能

让它们各个村庄,都联系起来的修路方法,帮助村民解决困难。

 

问题分析:可以把路径的长短看作权值大小,因此,只需用一些方法村庄图的最小生成树,将权值一一相加就可以得到答案,求最小生成树有很多种方法,

譬如说prim算法或者kruskal算法,这里村庄之间都是相互连通的(没有路0.0),属于稠密图,显然复杂度至于顶点个数有关的prim算法更为合适。

 

1 #include "cstdio" 2 #include "cstring" 3 int v[100][100]; 4 int flag[100]; 5 int prim(int n) 6 { 7     int mi,t=n,k,sum=0; 8     while (--t) 9     {10        mi = 100000;11        for (int i=2;i<=n;i++)12         {13             if (mi > v[1][i] && !flag[i] )14             {15                mi = v[1][i];16                k = i;17             }18         }19         sum += mi;20         flag[k] = 1;21         for (int i=2;i<=n;i++)22         {23            if (v[1][i] > v[k][i] && !flag[i])24                v[1][i] = v[k][i];25         }26     }27     return sum;28 }29 int main()30 {31     int n,a,b,c;32     while (scanf ("%d",&n) && n)33     {34        memset(v,0,sizeof(v));35         for (int j=1;j<=n*(n-1)/2;j++)36         {37             scanf ("%d%d%d",&a,&b,&c);38             v[a][b] = v[b][a] = c;39         }40         memset(flag,0,sizeof(flag));41         printf ("%d\n",prim(n));42     }43     return 0;44 }
View Code

 

转载于:https://www.cnblogs.com/huas-zlw/p/5705290.html

你可能感兴趣的文章
Atitit.git的存储结构and 追踪
查看>>
atitit 读书与获取知识资料的attilax的总结.docx
查看>>
B站 React教程笔记day2(3)React-Redux
查看>>
找了一个api管理工具
查看>>
C++——string类和标准模板库
查看>>
zt C++ list 类学习笔记
查看>>
git常用命令
查看>>
探讨和比较Java和_NET的序列化_Serialization_框架
查看>>
1、jQuery概述
查看>>
数组比较大小的几种方法及math是方法
查看>>
FTP站点建立 普通电脑版&&服务器版
查看>>
js 给一段代码,给出运行后的最终结果的一些综合情况、
查看>>
webservice 详解
查看>>
js自动补全实例
查看>>
VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“
查看>>
npm 安装 sass=-=-=
查看>>
WINFORM中加入WPF控件并绑定数据源实现跨线程自动更新
查看>>
C#类对象的事件定义
查看>>
各类程序员学习路线图
查看>>
HDU 5510 Bazinga KMP
查看>>