最小生成树的prim算法和kruskal算法
<span style="font-size:18px;">#include "stdafx.h"
#include <iostream>
using namespace std;//oj1017
//畅通工程,求最小公路长度
//====》求最小生成树
// prim算法 适合于求边稠密的图 O(n^2)
// Kruskal算法 适合于求边稀疏的图 O(e*loge)
//图用邻接矩阵表示#include <vector>
#include <utility>
class Graph_113
{
public:int vexnum;int arcnum;vector<vector<int> > arcs; //邻接矩阵Graph_113(int );int PrimShortTree();};Graph_113::Graph_113(int _vexnum)
{vexnum=_vexnum;arcnum = vexnum*(vexnum - 1) / 2;//初始化邻接矩阵vector<int> row(vexnum + 1, 0);for (int i = 0; i <= vexnum; ++i){arcs.push_back(row);}row.clear();//构造邻接矩阵int i, j, w;int N = arcnum;while (N--){cin >> i >> j >> w;arcs[i][j] = w;arcs[j][i] = w;}
}int Graph_113::PrimShortTree()
{int res = 0;//辅助数组vector<pair<int,int> > closedge(vexnum+1,make_pair(0,0));//初始点为1for (int i = 2; i <= vexnum; ++i){closedge[i].first = 1;closedge[i].second = arcs[1][i];}for (int i = 1; i <= vexnum; ++i){//找V-U集合中到U集合中点最近的点//作为T中的下一个顶点int min = 0;int j = 1;for (; j <= vexnum; ++j){if (closedge[j].second != 0){min = j;break;}}for (; j <= vexnum; ++j){if (closedge[j].second < closedge[min].second &&closedge[j].second!=0)min = j;}//加入最短路径res += closedge[min].second;//将第min个节点并入U集合for (int k = 1; k <= vexnum; ++k){if (arcs[min][k] < closedge[k].second){closedge[k].first = min;closedge[k].second = arcs[min][k];}}}return res;
}//Kruskal算法,存储边
int KruskalPath(int N,int arcs) //节点数,边数
{int i, j, w;int res = 0;vector<int> visit(N + 1, 0);vector<pair<int, pair<int, int> > > arc;while (arcs--){cin >> i >> j >> w;arc.push_back(make_pair(w, make_pair(i, j)));}//依次找出n-1条边,边满足要求:边的两个点来自两个连通区int count = N - 1;while (count--){typedef vector<pair<int, pair<int, int> > >::iterator myIter;//第一条满足要求的边myIter iter = arc.begin();pair<int, pair<int, int> > min;for ( ; iter != arc.end(); ++iter){if (!visit[iter->second.first] || !visit[iter->second.second]){min = *iter;break;}}//求最小边for (; iter != arc.end(); ++iter){if (visit[iter->second.first] && visit[iter->second.second])continue;if (iter->first < min.first)min = *iter;}//将最小边加入Tres += min.first;visit[min.second.first] = 1;visit[min.second.second] = 1;}return res;
}#include <fstream>
#include <string>
int main()
{ifstream infile;string filename = "case.txt";infile.open(filename.c_str());cin.rdbuf(infile.rdbuf());int N;while (cin >> N){if (N == 0)break;
// Graph_113 _graph(N);
// cout << _graph.PrimShortTree() << endl;cout << KruskalPath(N, N*(N - 1) / 2) << endl;}return 0;
}
</span>
最小生成树的prim算法和kruskal算法相关推荐
- 求的带权图最小生成树的Prim算法和Kruskal算法
求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...
- 【最小生成树】Prim算法和Kruskal算法的区别对比
Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法- 从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的- 所以说,Krus ...
- 加权无向图与最小生成树(Prim算法和Kruskal算法)
目录 0 引入 1 图的最小生成树定义及相关约定 2 最小生成树原理 2.1 性质 2.2 切分定理 3 贪心思想 4 Prim算法 4.1 算法步骤 4.2 API设计 4.3 Java代码演示 5 ...
- 最小生成树之Prim算法和Kruskal算法
一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 输入:一个加权连 ...
- 作业1-采用Prim算法和Kruskal算法构造最小生成树
采用Prim算法和Kruskal算法构造最小生成树 实验报告 1.问题 2.解析 (1)Prim算法 (2)Kruskal算法 3.设计 (1)Prim算法 (2)Kruskal算法 4.分析 (1) ...
- Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...
- 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法
第十九章 贪心算法.Prim算法和Kruskal算法 文章目录 第十九章 贪心算法.Prim算法和Kruskal算法 一.贪心算法 1.介绍 2.支付问题 二.Prim算法 1.最小生成树 2.介绍 ...
- matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现
Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...
- 【数据结构】最小生成树问题(Prim算法和Kruskal算法)
相关概念 连通图与它的生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图.若图的顶点数为n,则它的生成树含有n-1条边.一个连通图可能拥有多个生成树. 最小生成树(Minimum-Spanni ...
最新文章
- Android配置----Android开发环境搭建
- 推荐一个算法/数据结构 可视化(Data structure Visualization) 网站
- 基于 RocketMQ 构建阿里云事件驱动引擎EventBridge
- lseek成功但未生效?
- android壁纸选择器,Android 图片选择器
- 【C++】rand函数的基本使用
- lynx---CentOS终端访问IP
- R语言中package ‘xxxx’ is not available (for R version 3.2.5)解决
- Java String 对象,你真的了解了吗?| CSDN 博文精选
- 理解和使用NT驱动程序的执行上下文
- Linux-文件目录命令
- 国产操作系统之统信UOS安装
- 浏览网页隐藏图片 html,Html、Js实现网页图片切换及隐藏
- NET Reflector
- 5.验证面试高频问题整理(附答案)
- 易捷行云EasyStack与火星高科完成产品互认证,保护云上数据
- 云服务器租赁用途有哪些?
- 1725 天黑请闭眼
- Java小白修炼手册--第二阶段Java SE--IO流
- name norm is not defined