poj1861 最小生成树 prim amp; kruskal
// poj1861 最小生成树 prim & kruskal
//
// 一个水题,为的仅仅是回味一下模板。日后好有个照顾不是#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <iostream>using namespace std;const int MAX_N = 1008;
const int INF = 0x3f3f3f3f;
int g[MAX_N][MAX_N];
int n,m;
int cnt;
int mx;
int d[MAX_N];
bool vis[MAX_N];
int pre[MAX_N];
struct edge{int from;int to;int w;edge(){}edge(int from,int to,int w): from(from),to(to),w(w){}};
edge edges[MAX_N * 15];bool cmp(edge a,edge b){return a.w < b.w;
}void print1(){for (int i=1;i<=n;i++){for (int j=1;j<=n;j++)printf("%d ",g[i][j]);puts("");}}void input1(){int u,v,cost;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){g[i][j] = INF;if (i == j)g[i][j] = 0;}for (int i=0;i<m;i++){scanf("%d%d%d",&u,&v,&cost);g[u][v] = g[v][u] = cost;}// print1();for (int i=1;i<=n;i++){pre[i] = 1;}cnt = 0;}int fa[MAX_N];
int height[MAX_N];
void input2(){int u,v,cost;for (int i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&cost);edges[i] = edge(u,v,cost);}for (int i=1;i<=n;i++){fa[i] = i;height[i] = 0;}sort(edges+1,edges+m+1,cmp);}int getf(int x){if (x==fa[x])return x;return fa[x] = getf(fa[x]);
}void kruskal(){int cnt = 0;int mx = 0;for (int i=1;i<=m;i++){int x = getf(edges[i].from);int y = getf(edges[i].to);if (x==y)continue;if (height[x] < height[y]){fa[x] = y;}else {fa[y] = x;if (height[x]==height[y])height[x]++;}mx = max(mx,edges[i].w);edges[cnt++] = edges[i];}printf("%d\n",mx);printf("%d\n",cnt);for (int i=0;i<cnt;i++){printf("%d %d\n",edges[i].from,edges[i].to);}
}void prim(){for (int i=1;i<=n;i++)d[i] = g[1][i];d[1] = 0;for (int i=1;i<=n;i++){vis[i] = 0;}vis[1] = 1;mx = 0;for (int i=1;i<=n;i++){int k = -1;for (int j=1;j<=n;j++){if (!vis[j] && (k == -1 || d[k] > d[j])){k = j;}}if (k==-1)break;vis[k]++;mx = max(mx,d[k]);edges[cnt++] = edge(k,pre[k],d[k]);for (int j=1;j<=n;j++){if (!vis[j] && g[k][j]!= INF &&d[j] > g[k][j]){d[j] = g[k][j];pre[j] = k;}}}}void print(){printf("%d\n",mx);printf("%d\n",cnt);for (int i=0;i<cnt;i++){printf("%d %d\n",edges[i].from,edges[i].to);}
}void solve(){//prim();kruskal();//print();
}int main(){freopen("1.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){//input1();input2();solve();}
}
转载于:https://www.cnblogs.com/lxjshuju/p/6836422.html
poj1861 最小生成树 prim amp; kruskal相关推荐
- 生成树的概念,最小生成树Prim算法 Kruskal算法
求解最小生成树可以用Prim算法 Kruskal算法
- 最小生成树(Prim、Kruskal)算法,秒懂!
前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚,什么是最小生成树? 一个有 n 个结点的连通图的生成树是原图的极小连通子 ...
- 可视化最小生成树Prim、Kruskal
代码下载链接:(41条消息) 可视化最小生成树Kruskal,DEV配EGE-C文档类资源-CSDN文库 代码下载链接:(41条消息) 可视化最小生成树Prim,DEV配EGE-C文档类资源-CSDN ...
- 【数据结构】最小生成树 Prim算法 Kruskal算法
最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...
- poj 2031 BuildingaSpaceStation 最小生成树 Prim、Kruskal
题意: 三维空间里有一些球,给出球心坐标和半径,搭建通路,使得他们能够相互连通.如果两个球相交或者相切,则算已连通,无需再搭桥.求搭建通路的最小费用(费用就是边权,就是两个球面之间的距离). Inpu ...
- 最小生成树 | Prim算法 Kruskal算法 |C语言
一.Prim算法 MST收集的是顶点: 这里的dist[]是指结点V到最小生成树的最小距离: 当dist[V] = 0 时,表明结点V被收录到最小生成树中, 如果dist[W] != 0,表明结点W还 ...
- poj 2421 ConstructingRoads 最小生成树 Prim、Kruskal
题意: 有n个村庄,从1到n,你应该修建一些道路,这样每两个村庄就可以互相连接.我们说两个村庄A和B是相连的,如果并且仅当在A和B之间有一条道路,或者存在一个村庄C,使得A和C之间有一条道路,并且C和 ...
- 用Prim和Kruskal两种算法,求解最小生成树
本文通过具体的算法模板题,给出Prim和Kruskal两种求解最小生成树求解过程和代码~ 由浅入深,通俗易懂 题目选自洛谷P3366 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则 ...
- 数据结构实验之图论六:村村通公路(最小生成树Prim/Kruskal)
Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出 ...
最新文章
- JavaScript事件冒泡
- vue之watch用法
- 遇到 ORACLE 错误 1658
- 目前数据可视化工具软件的排名
- 市场研究中的数据分析知识整理 (四)-主成分分析和因子分析
- 台北三日自助游攻略(转载)
- Google Code的简单使用
- c语言成绩统计表,《小学期末考试成绩统计表五.xls》-支持高清全文免费浏览-max文档...
- 聚石塔服务器 微信,聚石塔云服务器
- 关于Fatal NI connect error 12170
- Salesforce: 关于Apexpages.Message类
- 践行网安,普惠河南——景安网络重磅网安公益项目加速推进中
- 虚拟化存储和非虚拟化存储
- JSP标签的简单使用
- 人工智能行业源代码防数据防泄密需求分析
- 英伟达Q3财报解读:营收连续四季度下滑 下一个增长拐点何时来?
- 为什么国家将加快人工智能研究生培养?又为什么很多研究生评论人工智能是个大坑呢?...
- echart地图知识点
- 我们如何在Pinterest Ads中使用AutoML,多任务学习和多塔模型
- vant树型菜单多级_无限层级菜单—左右值树型数据结构
热门文章
- C Primer Plus 第6章 C控制语句:循环 6.9 选择哪种循环
- zabbix之rpm简单快速安装详解
- linux的共享端口,Gogs与Linux共享SSH22端口
- c语言求一个数组的众数,众数问题 (C语言代码)
- python能解密java的,在python中解码Java对象
- 挂起和阻塞区别以及sleep和wait的区别
- matlab实现滑动平均滤波(二)
- android从服务端获取json解析显示在客户端上面,Android服务端获取json解析显示在客户端上面.doc...
- numpy生成随机数
- jittor和pytorch 生成网络对比之clustergan