soj2198: Highways_Prim

http://acm.scu.edu.cn/soj/problem.action?id=2198

简介题意:输入test测试用例,每个测试用例N个城镇,然后矩阵形式输入各个城镇之间的距离,要求输出使得花费最少的联通各个城镇的最长路径是哪个;

那就是最小生成树呗,输出最小生成树中最大的边长就行了。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAX 550
#define INF 0x3f3f3f3f
int map[MAX][MAX];
int dist[MAX];
bool visit[MAX];void prim(int n)
{bool flag = 1;memset(visit,0,sizeof(visit));memset(dist,INF,sizeof(dist));bool known = 1;for(int i = 1;i <= n; i++)if(map[1][i] != 0)dist[i] = map[1][i];visit[1] = 1;int sum = 0;for(int i = 1;i <= n; i++)      //挨个点去visit,选中的visit=1,没选中就一会再看。{                               //就好比说,1一次循环过后,选择了点3,3周围的dist也都知道了,那么我们还是从2点开始看距离int x;int minx = INF;for(int j = 1;j <= n; j++)  //i对应的每个点,对应没有visit过的,所有其他点的初始distif(!visit[j]&&dist[j]<minx){minx = dist[j];x = j;}if(flag){sum = minx; flag = !flag;}        //第一次sum没赋值的时候赋值,以后就不要每次都赋值,否则就覆盖了原来的sum呀//  sum = minx;if(minx < INF){visit[x] = 1;//sum += minx;                         //输出最小生成树的最大边长,我一直以为输出总距离和,幸好重新看题,大家也要仔细审题呀sum = sum>minx ? sum:minx;             //都写了include<algorithm>我还没用max,仿佛一只智障for(int j = 1;j <= n; j++){if(!visit[j]&&map[x][j]!=0&&map[x][j]<dist[j])dist[j] = map[x][j];          //对于选中的x=j点,赋值各个dist}}else break;}printf("%d\n",sum);
}int main()
{int test;scanf("%d",&test);while(test--){int n;scanf("%d",&n);for(int i = 1; i <= n; i++)for(int j = 1;j <= n; j++)scanf("%d",&map[i][j]);          //因为矩阵形式输入,所以右上三角和左下三角一样,随便你怎么写吧。prim(n);}return 0;
}

感觉就是prim,还没有记录前后连接城镇,所以是最简单的一种题,讲一下Prim的思想吧。

额……我从网上看了一个图解,不能更清晰了,在此把链接附一下,大家也学习学习,主要是分析表啊!!!!特别清晰

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html

他的代码我没有看,但是那个图解真的太好。

soj2198: Highways_最小生成树Prim相关推荐

  1. poj1861 最小生成树 prim amp; kruskal

    // poj1861 最小生成树 prim & kruskal // // 一个水题,为的仅仅是回味一下模板.日后好有个照顾不是#include <cstdio> #include ...

  2. 最小生成树prim、

    过年那几天确实没好好学习.在老家闲着也是闲着.可是就是没看书. 回来这几天又一直在弄个人博客.买域名云服务器备案什么的- -. 麻烦死了呢. 在腾讯花1块钱备案了一个网站www.goodgoodstu ...

  3. [Java学习] 最小生成树——Prim算法

    文章目录 最小生成树 Prim算法流程 应用实例 求最小生成树 最小生成树 百度百科上对于最小生成树的定义是这样的:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结 ...

  4. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  5. D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...

  6. 西南科技大学OJ题 求最小生成树(Prim算法)1075

    求最小生成树(Prim算法) 1000(ms) 10000(kb) 2256 / 4495 Tags: 生成树 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经 ...

  7. 最小生成树-Prim算法详解(含全部代码)

    目录 适用条件 测试所用图 算法详解 Prim算法代码 全部代码 实验结果 适用条件 加权连通图 测试所用图 所用原图及生成过程 其中,(a) 为原图,圆圈里面是节点的名称,边上的数字是边的权值.由实 ...

  8. 最小生成树 - Prim算法

    最小生成树 - Prim算法 思路: 采用 贪心策略,每次选取连通块外延的最短边和对应的点放入连通块,再更新新的连通块外延的边.连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小. 时间复杂度: ...

  9. 可视化最小生成树Prim、Kruskal

    代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...

最新文章

  1. 什么是BeanShell?
  2. 服务器间无密码scp
  3. 使用CUDA计算Haar小波变换
  4. java 7zip解压_Apache Commons Compress介绍-JAVA压缩解压7z文件
  5. C#和JS交互 WebBrowser实例
  6. Request_请求转发
  7. Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
  8. php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记
  9. Unity中制作小地图
  10. 10.生命周期和Zend引擎
  11. 坦克世界无法连接服务器未响应,打开坦克世界提示网络异常或者连接不上
  12. The Semantics of Constructors(拷贝构造函数之编译背后的行为)
  13. android u盘检测工具,android U盘检测及获取内存储器信息
  14. 你吃的外卖,半年前就做好了
  15. vue:前端导出PDF 加图片:前端
  16. 暗色科幻风格HTML登录页面css3+html5模板
  17. 开心一笑,,,哈哈哈
  18. C++ 计算多边形的面积,计算IOU
  19. 使用hanewin实现 win系统主机,vm虚拟机中linux系统和开发板三方共享文件夹
  20. 20155305乔磊2016-2017-2《Java程序设计》第二周学习总结

热门文章

  1. 《比尔盖茨传》学习笔记
  2. 平移、旋转和缩放矩阵推导
  3. 数据标准是什么?企业如何做好数据管理?
  4. R代码学习(1)——算术运算、关系运算、逻辑运算
  5. 基于OpenCV的人脸识别自助商店(源码&部署视频)
  6. java毕业设计——基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码)——打飞机游戏
  7. linux局域网共享目录软链接,网上邻居:LinuxMint局域网SAMBA共享如此简单
  8. Ubuntu16.04 rc.local不生效,启动过程中报“Failed to start /etc/rc.local Compatibility”错误
  9. oracle 截取时间至小时,Oracle中获取系统当前时间 和 进行时间间隔操作
  10. RIV A128显卡维修