算法学习之图的最小生成树Kruskal算法
来源:互联网 发布:游戏数据分析报告 编辑:程序博客网 时间:2024/05/16 23:50
一.问题描述
给定一个有权值的图,找出联通图内所有节点的最小路径。
二.数据
6 9
2 4 11
3 5 13
4 6 3
5 6 4
2 3 6
4 5 7
1 2 1
3 4 9
1 3 2
三.分析
首先分析我们要解决的问题本身是一个寻找子集的问题,所有的边是全集,而我们要生成的最小生成树就是那个子集,我们要从全集中筛选,那么我们要考虑的问题有两个,第一个是联通性,第二个是最小化问题,联通问题貌似是一个很麻烦的问题,如果从正面来思考要找出哪些边才能使的图是联通的并不简单,但是如果从反面来思考,我们去除边,如果两个点已经联通的话,那么这条边就可以去掉,然后可以通过凭借边的长短来进行排序,这样想来这还是个很巧妙的组合方法
//// main.cpp// 图的最小生成树之kruskal算法//// Created by 张嘉韬 on 16/3/18.// Copyright © 2016年 张嘉韬. All rights reserved.//#include <iostream>#include <cstring>#include <algorithm>using namespace std;int f[50];struct line{ int u; int v; int w;}lines[50];int cmp(const void *a,const void *b){ return (*(line *)a).w>(*(line *)b).w?1:-1;}void init(int n){ for(int i=1;i<=n;i++) f[i]=i;}int getf(int a){ if(f[a]==a) return a; else { f[a]=getf(f[a]); return f[a]; }}int merge(int a,int b){ int t1,t2; t1=getf(a); t2=getf(b); if(t1!=t2) { f[t2]=t1; return 1; } else return 0;}int main(int argc, const char * argv[]) { freopen("/Users/zhangjiatao/Desktop/input.txt","r",stdin); int n,m,sum; sum=0; cin>>n>>m; init(n); for(int i=0;i<=m-1;i++) { cin>>lines[i].u>>lines[i].v>>lines[i].w; } qsort(lines,m,sizeof(lines[0]),cmp); for(int i=0;i<=m-1;i++) cout<<lines[i].w<<" "; cout<<endl; for(int i=0;i<=m-1;i++) { if(merge(lines[i].u,lines[i].v)==1) { sum+=lines[i].w; cout<<i+1<<" "; } } cout<<endl; cout<<sum<<endl; return 0;}
0 0
- 算法学习之图的最小生成树Kruskal算法
- 图算法之最小生成树(Kruskal)
- 图之 最小生成树 Kruskal算法
- 图的最小生成树(MST)之Kruskal算法
- 图的最小生成树Kruskal算法
- 图之最小生成树-Prim算法和Kruskal算法
- 图算法:最小生成树算法之KrusKal
- 学习笔记--最小生成树之kruskal算法
- 最小生成树Kruskal算法学习
- 最小生成树之Kruskal算法
- 最小生成树之kruskal算法
- 贪心算法之最小生成树Kruskal
- 【算法】最小生成树之Kruskal
- 最小生成树之kruskal算法
- 最小生成树之kruskal算法
- 最小生成树之kruskal算法
- 最小生成树之Kruskal算法
- 最小生成树之kruskal算法
- C语言学习笔记之格式化I/O(scanf函数、printf函数)
- UVA 1423 Guess 拓扑排序
- webView 网页加载方式
- 视觉SLAM漫谈
- ASP连接数据库Office Access
- 算法学习之图的最小生成树Kruskal算法
- demo4j 读取xml
- servlet转发(forward)
- 基础测试查漏补缺
- C/C++中volatile关键字详解
- 用SQL找出前N名
- Android动态部署三:如何从插件apk中启动Activity(-)
- Command Line in Mac/Linux
- 【2011集训队出题】Crash的数字表格