<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算法相关推荐

  1. 求的带权图最小生成树的Prim算法和Kruskal算法

    求的带权图最小生成树的Prim算法和Kruskal算法 最小生成树的概念 最小生成树其实是最小权重生成树的简称. 一个连通图可能有多个生成树.当图中的边具有权值时,总会有一个生成树的边的权值之和小于或 ...

  2. 【最小生成树】Prim算法和Kruskal算法的区别对比

    Prim算法和Kruskal算法都是从连通图中找出最小生成树的经典算法- 从策略上来说,Prim算法是直接查找,多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的- 所以说,Krus ...

  3. 加权无向图与最小生成树(Prim算法和Kruskal算法)

    目录 0 引入 1 图的最小生成树定义及相关约定 2 最小生成树原理 2.1 性质 2.2 切分定理 3 贪心思想 4 Prim算法 4.1 算法步骤 4.2 API设计 4.3 Java代码演示 5 ...

  4. 最小生成树之Prim算法和Kruskal算法

    一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 输入:一个加权连 ...

  5. 作业1-采用Prim算法和Kruskal算法构造最小生成树

    采用Prim算法和Kruskal算法构造最小生成树 实验报告 1.问题 2.解析 (1)Prim算法 (2)Kruskal算法 3.设计 (1)Prim算法 (2)Kruskal算法 4.分析 (1) ...

  6. Prim算法和Kruskal算法

       Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...

  7. 【Java数据结构与算法】第十九章 贪心算法、Prim算法和Kruskal算法

    第十九章 贪心算法.Prim算法和Kruskal算法 文章目录 第十九章 贪心算法.Prim算法和Kruskal算法 一.贪心算法 1.介绍 2.支付问题 二.Prim算法 1.最小生成树 2.介绍 ...

  8. matlab实现prim算法,Prim算法和Kruskal算法的Matlab实现

    Prim算法和Kruskal算法的Matlab实现 <计算机仿真>期末大作业 Prim算法和Kruskal算法的Matlab实现 05605刘禹050697(30) 连线问题应用举例: 欲 ...

  9. 【数据结构】最小生成树问题(Prim算法和Kruskal算法)

    相关概念 连通图与它的生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图.若图的顶点数为n,则它的生成树含有n-1条边.一个连通图可能拥有多个生成树. 最小生成树(Minimum-Spanni ...

最新文章

  1. Android配置----Android开发环境搭建
  2. 推荐一个算法/数据结构 可视化(Data structure Visualization) 网站
  3. 基于 RocketMQ 构建阿里云事件驱动引擎EventBridge
  4. lseek成功但未生效?
  5. android壁纸选择器,Android 图片选择器
  6. 【C++】rand函数的基本使用
  7. lynx---CentOS终端访问IP
  8. R语言中package ‘xxxx’ is not available (for R version 3.2.5)解决
  9. Java String 对象,你真的了解了吗?| CSDN 博文精选
  10. 理解和使用NT驱动程序的执行上下文
  11. Linux-文件目录命令
  12. 国产操作系统之统信UOS安装
  13. 浏览网页隐藏图片 html,Html、Js实现网页图片切换及隐藏
  14. NET Reflector
  15. 5.验证面试高频问题整理(附答案)
  16. 易捷行云EasyStack与火星高科完成产品互认证,保护云上数据
  17. 云服务器租赁用途有哪些?
  18. 1725 天黑请闭眼
  19. Java小白修炼手册--第二阶段Java SE--IO流
  20. name norm is not defined

热门文章

  1. 如何将多个PDF文件合并成一个大的PDF文件
  2. Oracle备份一张表
  3. Oracle 备份杂谈
  4. 【踩坑记录】三款Lua IDE工具对比
  5. unity获取Excle表格内容
  6. 剑网3 最新服务器,《剑网3》上海高校服务器今日开放
  7. 常用的视频会议软件需要什么功能
  8. 实验2linux进程控制与通信,实验2 进程控制与通信管理word文档良心出品
  9. 珠海化学分析实验室建设思路
  10. 极智AI | 英伟达 Jetson 系列边缘盒子性能测评