HDU1102 Constructing Roads
来源:互联网 发布:java finalize 编辑:程序博客网 时间:2024/06/05 05:46
题意大致是:
有N多村子,村庄之间的距离已经给出。求联通各个村庄的最短路径。
有一个附加条件,期中一些村庄已经有公路村庄,即已经连通。
非常简单, 只要把已经连通的村庄之间的距离设置为0,然后用Prim算法套用模板直接计算即可。
#include<iostream>#include<math.h>using namespace std;#define MAXN 110#define INF 0x3fffffdouble map[MAXN][MAXN];double dis[MAXN];//存放现阶段到此点最断的里程;bool visited[MAXN];double Prim(int n) {visited[0] = true;double min_dis = 0;dis[0] = 0;for (int i=1; i<n; i++) {visited[i] = false;dis[i] = map[0][i];}for (int i=1; i<n; i++) {//N个点有N-1条边,故从1开始循环double temp_dis = INF;int dis_index = 0;for (int j=0; j<n; j++) {//寻找从j点出发那条路径最短;if (!visited[j] && temp_dis > dis[j]) {temp_dis = dis[j];dis_index = j;}}visited[dis_index] = true;min_dis += temp_dis;for (int k=0; k<n; k++) {//更新dis[];if (!visited[k] && map[k][dis_index] < dis[k]) {dis[k] = map[k][dis_index];}}}return min_dis;}int main() {int n;while (cin>>n) {for (int i=0; i<n; i++) {for (int j=0;j<n;j++) {cin >> map[i][j];}}int m;cin>>m;//已经建成公路的村庄之间的路径设置为0;for (int i=0; i < m; i++) {int a, b;cin>>a>>b;map[a-1][b-1] = 0;map[b-1][a-1] = 0;}cout<<Prim(n)<<endl;}}
- Constructing Roads hdu1102
- Constructing roads(HDU1102)
- hdu1102 Constructing Roads
- HDU1102 Constructing Roads
- Constructing Roads hdu1102 kruskal
- HDU1102--Constructing Roads
- hdu1102 Constructing Roads
- hdu1102:Constructing Roads(prime)
- HDU1102 Constructing Roads【Prim】
- HDU1102---Constructing Roads
- HDU1102 Constructing Roads
- HDU1102 Constructing Roads
- HDU1102-Constructing Roads
- HDU1102&&POJ2421 Constructing Roads
- HDU1102 Constructing Roads (Kruskal)
- hdu1102 Constructing Roads
- hdu1102 Constructing Roads(prim)
- 7.22 T hdu1102 Constructing Roads
- Dokan(Windows FUSE)学习笔记
- hibernate3.0 中文查询时数组越界
- JavaScript 变量声明
- Connectify: 同时使用多个网络的带宽
- HDU-1305-Immediate Decodability
- HDU1102 Constructing Roads
- 删繁就简
- ibatis 配置文件
- Android 动画
- [Android1.5]TextView跑马灯效果
- thinkphp视频目录
- [留着备用]ASP.NET动态菜单生成通用方法
- 导入别人的项目时,工程中不自动生成Android Dependencies的解决方式
- java中用反射调用其他类的main方法时应注意的问题