博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1251 Jungle Roads【最小生成树】
阅读量:7009 次
发布时间:2019-06-28

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

题意:

首先给你一个图,需要你求出最小生成树,首先输入n个节点,用大写字母表示各节点,接着说有几个点和它相连,然后给出节点与节点之间的权值。

拿第二个样例举例:比如有3个节点,然后接下来有3-1行表示了边的情况,拿第一行来说:
A 2 B 10 C 40
表示A有2个邻点,B和C,AB权值是10,AC权值是40。

思路:

直接套prime算法模板和kuskal算法模板,然后处理下数据就可以了。

代码:

prime:

#include 
#include
#include
using namespace std;const int maxn=30;const int inf=0x3f3f3f3f;int road[maxn][maxn],dis[maxn];bool vis[maxn];int n;void prim(){ int minn, v; for(int i = 0; i < n; i++) { dis[i] = road[0][i]; vis[i] = false; } for(int i = 1; i <= n; i++)//包括第一个点在内,一共要纳入n个点 { minn = inf; for(int j = 0; j < n; j++)//每次找出未纳入顶点集与已知顶点集构成的权值最小的一条边 { if(!vis[j] && minn > dis[j]) { v = j; minn = dis[j]; } } vis[v] = true;//把该顶点纳入已知集合 for(int j = 0; j < n; j++)//更新与未纳入集合中的顶点的边的最小权值 { if(!vis[j] && dis[j] > road[v][j]) dis[j] = road[v][j]; } } for(int i = 1; i < n; i++) dis[0] += dis[i]; cout << dis[0] << endl;}int main(){ int m,w; char a[5],b[5]; while(cin>>n,n) { memset(road,60,sizeof(road)); for(int i=0;i
View Code

kruskal:

 

#include
#include
using namespace std;int p[30];struct node{ int villagea; int villageb; int distance;}roads[80];bool cmp(node a, node b){ return a.distance < b.distance;}int kruskal(int x){ return p[x] == x ? x : p[x] = kruskal(p[x]);}int main(){ int n, k, distance, number, ans; char start_village, end_village; while(cin >> n, n) { ans = k = 0; for(int i = 0; i < 27; i++) p[i] = i; for(int i = 0; i < n- 1; i++) { cin >> start_village >> number; for(int j = 0; j < number; j++, k++) { cin >> end_village >> distance; roads[k].villagea = start_village - 'A'; roads[k].villageb = end_village - 'A'; roads[k].distance = distance; } } sort(roads, roads + k, cmp); for(int i = 0; i < k; i++) { int x = kruskal(roads[i].villagea); int y = kruskal(roads[i].villageb); if(x != y) { ans = ans + roads[i].distance; p[y] = x; } } cout << ans << endl; } return 0;}
View Code

 

转载于:https://www.cnblogs.com/darklights/p/7635286.html

你可能感兴趣的文章
Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】
查看>>
CCCC L1-039. 古风排版【图形输出/循环控制行列/模拟/细节】
查看>>
POJ 1182 食物链 【带权并查集/补集法】
查看>>
V字形
查看>>
Flask学习笔记(3)-数据库迁移
查看>>
Hbase常用操作
查看>>
一行命令学会全基因组关联分析(GWAS)的meta分析
查看>>
第二阶段冲刺——six
查看>>
模块封装代码
查看>>
《Machine Learning》(第一章)序章
查看>>
【右键禁用U盘的小技巧】
查看>>
执行sql语句后的数据处理api
查看>>
jquery $.each的用法
查看>>
Python --元组与列表的差异
查看>>
PHP TP增删改
查看>>
VMware虚拟机与主机联通及配置上网
查看>>
single-row function和muti-row function
查看>>
keepalived
查看>>
意向锁
查看>>
线性规划
查看>>