很裸地求最小生成树的题目。题意就不多说了,最重要的就是记录一下学会了prim算法。

初学prim,给我的第一感觉就是和dijkstra好像啊,感觉两者的区别还是有的:

1:prim是求最小生成树的算法。

  dijkstra是求最短路的算法。

2:prim中dis保存的是未加入集合的点,加入集合需要的代价,而已经加入集合中的点加入花费代价是其他变量保存的。

  dijkstra中dis保存的是从起点到当前点所花费的最小代价。

 #include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std; const int INF = 0x3f3f3f3f;
const int maxn = ;
//map记录路径,vis记录是否加入集合,dis记录未加入集合的点与集合的最短距离
int map[maxn][maxn], vis[maxn], dis[maxn], n; int prim ()
{
int i, sum;
memset(vis, , sizeof(vis));//标记所有的点都在集合外
sum = ;//总花费记为0
vis[] = ;//把1当成起始集合
for (i=; i<=n; i++)//初始化dis
dis[i] = map[][i];
for (int j=; j<n; j++)
{//因为已经加入集合了一个点,所以只需循环n-1次
int min = INF, index;
for (i=; i<=n; i++)//寻找加入集合的最优点
if (!vis[i] && dis[i]<min)
{
min = dis[i];
index = i;
}
sum += min;//把最优点加入集合
vis[index] = ;
for (i=; i<=n; i++)//对未加入集合的点加入到集合所用的花费进行优化
if (!vis[i] && dis[i]>map[index][i])
dis[i] = map[index][i];
}
return sum;
}
int main ()
{
int s;
while (scanf ("%d", &n)!= EOF)
{
for (int i=; i<=n; i++)
for (int j=; j<=n; j++)
{
scanf ("%d", &s);
map[i][j] = s;
}
printf ("%d\n", prim ());
}
return ;
}

poj 1258 Agri-Net prim模板 prim与dijkstra的区别的更多相关文章

  1. poj 1251 poj 1258 hdu 1863 poj 1287 poj 2421 hdu 1233 最小生成树模板题

    poj 1251  && hdu 1301 Sample Input 9 //n 结点数A 2 B 12 I 25B 3 C 10 H 40 I 8C 2 D 18 G 55D 1 E ...

  2. POJ 1258 Agri-Net 【Prime】模板题

    题目链接>>> 题目大意:     给你N*N矩阵,表示N个村庄之间的距离.FJ要把N个村庄全都连接起来,求连接的最短距离(即求最小生成树).解析如下: #include <c ...

  3. HDU1875+Prim模板

    https://cn.vjudge.net/problem/HDU-1875 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府 ...

  4. HDU 1223 还是畅通工程(最小生成树prim模板)

    一个很简单的prim模板,但虽然是模板,但也是最基础的,也要脱离模板熟练打出来 后期会更新kruskal写法 #include<iostream> #include<cstdio&g ...

  5. 最小生成树 10.1.5.253 1505 poj 1258 http://poj.org/problem?id=1258

    #include <iostream>// poj 1258 10.1.5.253 1505 using namespace std; #define N 105 // 顶点的最大个数 ( ...

  6. POJ 1258 Agri-Net|| POJ 2485 Highways MST

    POJ 1258 Agri-Net http://poj.org/problem?id=1258 水题. 题目就是让你求MST,连矩阵都给你了. prim版 #include<cstdio> ...

  7. 【图论】信手拈来的Prim,Kruskal和Dijkstra

    关于三个简单的图论算法 prim,dijkstra和kruskal三个图论的算法,初学者容易将他们搞混,所以放在一起了. prim和kruskal是最小生成树(MST)的算法,dijkstra是单源最 ...

  8. 求最小生成树(暴力法,prim,prim的堆优化,kruskal)

    求最小生成树(暴力法,prim,prim的堆优化,kruskal) 5 71 2 22 5 21 3 41 4 73 4 12 3 13 5 6 我们采用的是dfs的回溯暴力,所以对于如下图,只能搜索 ...

  9. POJ 1258:Agri-Net Prim最小生成树模板题

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 45050   Accepted: 18479 Descri ...

随机推荐

  1. Android切图注意事项

    1.App Logo大小共五种: 48*48 72*72 96*96 144*144 192*192 2. App启动页所需尺寸: 320×480 480×800 720*1280 1080*1920 ...

  2. sudo 用户添加

    sudo 用户添加 /etc/sudoers 在 ## Allow root to run any commands anywhere root    ALL=(ALL)   ALL 下面加上 xxx ...

  3. RHEL 启动系统及故障排除

    一:Linux的启动过程: 开机加电自检->MBR引导(boot loader占446字节,分区列表64字节,magic占2字节)-->grub菜单(MBR是grub的第一个字段,第二个字 ...

  4. 设计模式 之代理(Proxy)模式

    为什么这里要定义代理呢?所谓代理代理,当然就是你不想做的事.找别人去做,这就是代理.所以,当你写代码的时候.你想保持类的简单性.重用性.你就能够把事件尽量都交给其他类去做.自己仅仅管做好自己的事.也就 ...

  5. java克隆对象clone()的使用方法和作用

    转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本 ...

  6. php验证邮箱

    <?php if(isset($_POST['email'])){ $email = $_POST['email']; if(filter_var($email, FILTER_VALIDATE ...

  7. 【Linux编程】进程终止和exit函数

    内核要运行一个应用程序,唯一的途径是通过系统调用.exec函数.exec又会调用启动程序,启动程序(一般是汇编语言)以类似以下的方式调用main函数: void exit(main(argc, arg ...

  8. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  9. [英语学习]王秒同学《21天TED英语精练团》

    第一个分享: Chris Anderson的TED's secret to great public speaking(英音). There's no single formula for a gre ...

  10. Trie(前缀树)和ternary trie和binary search tree

    1 什么是trie trie是一棵多叉树,假如存放的是由26个字母(不区分大小写)构成的字符串的话,那么就是一棵26叉树. trie树是一棵前缀树,因为每个结点只保存字符串中的一个字符,整个字符串保存 ...