题目链接

http://poj.org/problem?id=1251

题意

有n个村庄,村庄之间有道路连接,求一条最短的路径能够连接起所有村庄,输出这条最短路径的长度。

思路

最小生成树问题,使用普利姆算法(Prime)或者克鲁斯卡尔算法(Kruskal)解决。

代码

Prime算法:

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int INF = 0xfffffff;
const int N = ;
int n;
int jungle[N][N];
int dist[N]; //记录从起点到其余各点的距离并不断更新 int prime()
{
int min_edge, min_node;
for (int i = ; i < n; i++)
dist[i] = INF;
int now = ;
int ans = ;
for (int i = ; i < n - ; i++)
{
dist[now] = -; //标记结点now+'A'被访问过了
min_edge = INF;
for (int j = ; j < n; j++)
{
if (j != now && dist[j]>=)
{
if (jungle[now][j]>)
dist[j] = min(dist[j], jungle[now][j]);
if (dist[j] < min_edge)
{
min_edge = dist[j]; //选取从当前结点到其余各点的最短路径
min_node = j;
}
}
}
now = min_node;
ans += min_edge; //当前最小生成树的长度
}
return ans;
} int main()
{
//freopen("poj1251.txt", "r", stdin);
while (cin >> n && n)
{
memset(jungle, , sizeof(jungle));
for (int i = ;i < n-;i++)
{
char p, q;
int v, w;
cin >> p >> v;
for (int j = ;j < v;j++)
{
cin >> q >> w;
jungle[p - 'A'][q - 'A'] = w;
jungle[q - 'A'][p - 'A'] = w;
}
}
int ans = prime();
cout << ans << endl;
}
return ;
}

Kruskal算法:

 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int N = ;
int s[N], e[N], v[N]; //分别存储每一条路的起点、终点、长度
int p[N]; //并查集使用
int n;
int cnt; //存储有多少条路 bool cmp(int i, int j)
{
return v[i] < v[j];
} int find_root(int x)
{
if (p[x] == -)
return x;
else return find_root(p[x]);
} int kruskal()
{
memset(p, -, sizeof(p));
int r[N];
for (int i = ; i < cnt; i++)
r[i] = i;
sort(r, r + cnt, cmp); //根据路径长度v[]的大小对数组r[]排序
int ans = ;
for (int i = ; i < cnt; i++)
{
int cur = r[i];
int a = find_root(s[cur]);
int b = find_root(e[cur]);
if (a != b)
{
ans += v[cur];
p[a] = b;
}
}
return ans;
} int main()
{
//freopen("poj1251.txt", "r", stdin);
while (cin >> n && n)
{
cnt = ;
char p, q;
int nums, w;
for (int i = ; i < n - ; i++)
{
cin >> p >> nums;
for (int j = ; j < nums; j++)
{
cin >> q >> w;
s[cnt] = p - 'A';
e[cnt] = q - 'A';
v[cnt] = w;
cnt++;
}
}
int ans = kruskal();
cout << ans << endl;
}
return ;
}

poj1251 Jungle Roads(Prime || Kruskal)的更多相关文章

  1. POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解

    题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...

  2. hdoj1102 Constructing Roads(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意 有n个村庄(编号1~n),给出n个村庄之间的距离,开始时n个村庄之间已经有了q条路,现在需 ...

  3. HDU-1301 Jungle Roads(最小生成树[Prim])

    Jungle Roads Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  4. poj1258 Agri-Net(Prime || Kruskal)

    题目链接 http://poj.org/problem?id=1258 题意 有n个农场,现在要在n个农场之间铺设光纤使得n个农场连接起来,求铺设光纤的最短距离. 思路 最小生成树问题,使用Prime ...

  5. hdoj1879 继续畅通工程(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1879 思路 这题和hdoj1102很像,图中的有一些路已经修好了,对于这些已经修好的路,我们令还需要修 ...

  6. hdoj1863 畅通工程(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1863 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决.这题在hdoj1233的基础 ...

  7. hdoj1233 还是畅通工程(Prime || Kruskal)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决. 代码 Prime算法: # ...

  8. 九度OJ 1154:Jungle Roads(丛林路径) (最小生成树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:832 解决:555 题目描述: The Head Elder of the tropical island of Lagrishan has ...

  9. POJ1251 Jungle Roads(Kruskal)(并查集)

    Jungle Roads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23882   Accepted: 11193 De ...

随机推荐

  1. Chrome浏览器F12讲解

    Chrome浏览器相对于其他的浏览器而言,DevTools(开发者工具)非常强大.这节课将为大家介绍怎么利用Chrome浏览器的开发者工具进行HTTP请求分析 Chrome浏览器讲解 Chrome 开 ...

  2. H264编码profile & level控制

    背景知识 先科普一下profile&level.(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high:  1.Baseli ...

  3. Java获取精确到毫秒的时间戳

    import java.util.Date; public class Timestamp { /** 获取精确到毫秒的时间戳 * @param date * @return **/ public s ...

  4. Java并发编程原理与实战三十七:线程池的原理与使用

    一.简介 线程池在我们的高并发环境下,实际应用是非常多的!!适用频率非常高! 有过使用过Executors框架的朋友,可能不太知道底层的实现,这里就是讲Executors是由ThreadPoolExe ...

  5. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享

    首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. 本实例仅存储用户id于用户名,对于多级权限的架构,可以自行修改增加权限字段   本实例采用vs2010编写 ...

  6. 边框画的三角形给shadow

    本文地址:http://www.cnblogs.com/veinyin/p/8690882.html  要写一个对话气泡样式,我们首先想到的当然给是一个盒子,然后用边框画一个三角形定位过去. 如果不需 ...

  7. 转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    转载地址:http://emouse.cnblogs.com/ 飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其 ...

  8. 【译】第六篇 Replication:合并复制-发布

    本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...

  9. Unity 3(二):Unity在AOP方面的应用

    本文关注以下方面(环境为VS2012..Net Framework 4.5以及Unity 3): AOP简介: Interception using Unity示例 配置文件示例 一.AOP简介 AO ...

  10. local variables referenced from a Lambda expression must be final or effectively final------理解

    前几天使用lamdba时,报了一个这个错,原因是在lamdba体中使用了一个变量,觉得很奇怪! 今天在读这本书的时候,又看到了这个解释,这里有了更深刻的理解,总结一下: 在jdk1.8之前在使用匿名内 ...