poj1258 Agri-Net(Prime || Kruskal)
题目链接
http://poj.org/problem?id=1258
题意
有n个农场,现在要在n个农场之间铺设光纤使得n个农场连接起来,求铺设光纤的最短距离。
思路
最小生成树问题,使用Prime算法或者Kruskal算法解决。
代码
Prime算法:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std; const int INF = 0x7fffffff;
const int N = + ;
int map[N][N];
int dist[N];
int n; void prime()
{
int min_edge, min_node;
for (int i = ; i < n; i++)
dist[i] = INF;
int ans = ;
int now = ;
for (int i = ; i < n - ; i++)
{
dist[now] = -;
min_edge = INF;
for (int j = ; j < n; j++)
{
if (j != now && dist[j] >= )
{
if (map[now][j]>)
dist[j] = min(dist[j], map[now][j]);
if (dist[j] < min_edge)
{
min_edge = dist[j]; //min_edge存储与当前结点相连的最短的边
min_node = j;
}
}
}
ans += min_edge;
now = min_node;
}
printf("%d\n", ans);
} int main()
{
//freopen("poj1258.txt", "r", stdin);
while (scanf("%d", &n) == )
{
memset(map, , sizeof(map)); //注意初始化
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
cin >> map[i][j];
prime();
}
return ;
}
Kruskal算法:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std; struct Edge
{
int a, b, dist; Edge() {}
Edge(int a, int b, int d) :a(a), b(b), dist(d) {}
}; bool cmp(Edge e1, Edge e2)
{
return e1.dist < e2.dist;
} const int N = + ;
vector<Edge> v;
int p[N];
int map[N][N];
int n; int find_root(int x)
{
if (p[x] == -)
return x;
else return find_root(p[x]);
} void kruskal()
{
memset(p, -, sizeof(p));
sort(v.begin(), v.end(), cmp); //将边按边长从短到长排序
int ans = ;
for (int i = ; i < v.size(); i++)
{
int ra = find_root(v[i].a);
int rb = find_root(v[i].b);
if (ra != rb)
{
ans += v[i].dist;
p[ra] = rb;
}
}
printf("%d\n", ans);
} int main()
{
//freopen("poj1258.txt", "r", stdin);
while (scanf("%d", &n) == )
{
v.clear(); //注意初始化
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
cin >> map[i][j];
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
if (i < j) v.push_back(Edge(i, j, map[i][j]));
kruskal();
}
return ;
}
poj1258 Agri-Net(Prime || Kruskal)的更多相关文章
- poj1251 Jungle Roads(Prime || Kruskal)
题目链接 http://poj.org/problem?id=1251 题意 有n个村庄,村庄之间有道路连接,求一条最短的路径能够连接起所有村庄,输出这条最短路径的长度. 思路 最小生成树问题,使用普 ...
- hdoj1102 Constructing Roads(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1102 题意 有n个村庄(编号1~n),给出n个村庄之间的距离,开始时n个村庄之间已经有了q条路,现在需 ...
- hdoj1879 继续畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1879 思路 这题和hdoj1102很像,图中的有一些路已经修好了,对于这些已经修好的路,我们令还需要修 ...
- hdoj1863 畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1863 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决.这题在hdoj1233的基础 ...
- hdoj1233 还是畅通工程(Prime || Kruskal)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1233 思路 最小生成树问题,使用Prime算法或者Kruskal算法解决. 代码 Prime算法: # ...
- 最小生成树算法(Prim,Kruskal)
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- 最小生成树算法详解(prim+kruskal)
最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...
- BZOJ 1196 [HNOI2006]公路修建问题:二分 + 贪心生成树check(类似kruskal)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1196 题意: n个城市,m对城市之间可以修公路. 公路有两种,一级公路和二级公路,在第i对 ...
- 最小生成树(prim&kruskal)
最近都是图,为了防止几次记不住,先把自己理解的写下来,有问题继续改.先把算法过程记下来: prime算法: 原始的加权连通图——————D被选作起点,选与之相连的权值 ...
随机推荐
- codevs 3160 最长公共子串
3160 最长公共子串 http://codevs.cn/problem/3160/ 时间限制: 2 s 空间限制: 128000 KB 题目描述 Description 给出两个由小写字母组 ...
- Linux根目录解析
根目录结构如下: 1. / - 根目录: 每一个文件和目录都从这里开始. 只有root用户具有该目录下的写权限.此目录和/root目录不同,/root目录是root用户的主目录. 2. /bin - ...
- [转载]AMD 的 CommonJS wrapping
https://www.imququ.com/post/amd-simplified-commonjs-wrapping.html 它是什么? 为了复用已有的 CommonJS 模块,AMD 规定了 ...
- 由简单的CMD命令引发的一场学习战斗
想要打开一个软件时,由于桌面没有存放快捷方式,又忘了软件存放在电脑上的哪个角落.脑海里突然闪过一个想法:用CMD自定义软件的打开方式,于是问了度娘.由此,引发了一场停不下来的CMD学习战斗. 爱上CM ...
- jQuery技巧笔记
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- 一些达成共识的JavaScript编码约定[转]
如果你的代码易于阅读,那么代码中bug也将会很少,因为一些bug可以很容被调试,并且,其他开发者参与你项目时的门槛也会比较低.因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要.与其他 ...
- kdissert:linux下的自由脑图软件
----------------------------------------------------作者: 吉庆 email: jiqingwu@gmail.commainpage: http ...
- windows环境下git的环境变量配置
1.从官网下载git这个软件.msi格式,然后安装. 2.找到你的git的安装目录,并记录下来 3.配置环境变量:在path里加入—— ;你的git的安装目录\bin;你的git的安装目录\libe ...
- NYOJ 119 士兵杀敌(三) (线段树)
题目链接 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算 ...
- flask配置日志输出文件
1.flask可以通过日志库来指点日志输出的路径, 配置日志输出的连接:www.gaodin.com