博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2485 Highways(最小生成树)
阅读量:6073 次
发布时间:2019-06-20

本文共 2065 字,大约阅读时间需要 6 分钟。

题意:

城市之间建高速公路,要求在能连通的情况下找出最小生成树最大的边

要点:

最小生成树,这题我学了一下prim算法。这个算法的要点是用点遍历,关键之处在于建立一个不断更新的low数组,这个数组记录生成树的过程中能接触到的对应最小权值。每次先随便选一个顶点作为起点,然后存入low数组,寻找一次当前权值后,集合中顶点的数目增加,能接触到的边改变,所以更新low数组。

 

Prim算法:

 

15341269 Accepted 564K 172MS 805B 2016-04-01 19:16:18
#include
#include
#include
#define INF 0xffffffint n,maxlen;int map[505][505],low[505];bool vis[505];void prim(){ memset(vis, false, sizeof(vis)); int i,j,mark; for (i = 1; i <= n; i++)//刚开始随便选1作为根 low[i] = map[1][i]; vis[1] = true; for (i = 1; i < n; i++)//注意这里因为1已经放入所以只要遍历n-1次即可 { int min = INF; for (j = 1; j <= n; j++) { if (!vis[j] && min > low[j])//找出最小权值并记录位置 { min = low[j]; mark = j; } } vis[mark] = true; if (maxlen < min) maxlen = min;//题目要求最小生成树中的最长边 for (j = 1; j <= n; j++) if (!vis[j] && map[mark][j] < low[j]) low[j] = map[mark][j];//更新连通后可能接触到的权值 }}int main(){ int t; scanf("%d", &t); while (t--) { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) scanf("%d", &map[i][j]); maxlen = 0; prim(); printf("%d\n", maxlen); } return 0;}

 

Kruskal算法:

15341829 Accepted 640K 313MS 1051B 2016-04-01 21:14:11
#include
#include
#include
#include
using namespace std;int num, n;int p[505];struct egde{ int u, v, len;}e[500*500];bool cmp(const egde &a, const egde &b){ return a.len < b.len;}void init(){ for (int i = 0; i < n; ++i) p[i] = i;}int find(int x){ if (x == p[x]) return x; return p[x] = find(p[x]);}bool merge(int x,int y){ x = find(x); y = find(y); if (x != y) { p[x] = y; return true; } return false;}int kruskal(){ init(); int max = -1,edges=0; sort(e, e + num, cmp); for (int i = 0; i < num; ++i) { if (merge(e[i].u, e[i].v)) { if (max < e[i].len) max = e[i].len; edges++; } if (edges + 1 == n) return max; } return -1;}int main(){ int t,temp; scanf("%d", &t); while (t--) { num = 0; scanf("%d", &n); for (int i = 0; i < n; ++i) for (int j = 0; j

 

 

 

 

转载于:https://www.cnblogs.com/seasonal/p/10343802.html

你可能感兴趣的文章
IOS中文排序
查看>>
PHP中替换换行符
查看>>
17.Case函数
查看>>
hdu 2647 Reward
查看>>
sharepoint2013中文版新体验—office web app 2013不允许与sharepint2013安装在同一台服务器上(2)...
查看>>
hrbeu 哈工程 Eular Graph
查看>>
隐马尔可夫模型(二)——隐马尔可夫模型的构成
查看>>
【OpenCV学习】安防监控可疑走动报警
查看>>
DotNetBar 10.9.0.4 原版(DotNetBar For Windows Forms 10)控件收集
查看>>
maven archetype:generate 的进一步理解
查看>>
用C++实现一个不能被继承的类
查看>>
使用CSS3技术增强你的文字排版
查看>>
LinearLayout(线性布局)
查看>>
Linux 下编译、安装、配置 QT
查看>>
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...
查看>>
daemon进程
查看>>
选择合适的项目-任务管理工具Jira Redmine Trac对比
查看>>
Android之更新ListView,位置置顶的问题
查看>>
ios公司开发者账号申请分享攻略(转自yiwind0101)
查看>>
Javascript如何判断对象是否相等
查看>>