用贪心算法求解最小生成树
一、实验要求与目的
- 熟悉贪心算法的基本原理与适用范围。
- 使用贪心算法编程,求解最小生成树问题。
二、实验内容
任选一种贪心算法(Prim或Kruskal),求解最小生成树。对算法进行描述和复杂性分析。
编程实现,并给出测试实例
三、实现思想
Prim:S、V为两个集合,S中初始为{1},V中包含了所有的顶点,然后从V-S中选出和S中顶点距离最近的顶点j,并将j添加到S中。设置两个数组closest和lowcost。对于每个j属于V-S,closet[j]就是j在S中的邻接点,它于S中其他邻接点k相比较有v[j][closet[j]]<=v[j][k],其中lowcost[j]的值就是v[j][closest]。最后lowcost存储的就是相应的最小生成树的权值,而对于每个顶点,closest中可以找到最小生成树所对应的边。
四、实现代码
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define mmax 100 #define maxt 100000000 int v[mmax][mmax];void Prim(int n){int low[mmax];// int clo[mmax];bool s[mmax];//判断该节点是否在S中 s[1]=true;for(int i=2;i<=n;i++){low[i]=v[1][i];//初始化 clo[i]=1;s[i]=false;}for(int i=1;i<n;i++){//对剩余的n-1个顶点进行操作 ,此处的i并无实际意思,只是起到一个记录变量的作用 int min=maxt;int j=1;for(int k=2;k<=n;k++)//从V-S中找到S中边权最小的节点 if((low[k]<min)&&(!s[k])){min=low[k];j=k;}cout<<j<<" "<<clo[j]<<":"<<low[j]<<endl;s[j]=true;for(int k=2;k<=n;k++){//调整low中的值,加入j节点之后,使得两个集合中的距离最小 if((v[j][k]<low[k])&&(!s[k])){low[k]=v[j][k];clo[k]=j;}}} } int main() {int n,m;//n vertexs and m edgescin>>n>>m;int ii,jj,tt;for(int i=0;i<=n;i++){for(int j=0;j<=n;j++)v[i][j]=maxt;}for(int i=0;i<m;i++){cin>>ii>>jj>>tt;v[ii][jj]=tt;v[jj][ii]=tt;}Prim(n);return 0; }//6 10 //1 2 6 //1 4 5 //1 3 1 //2 3 5 //2 5 3 //3 4 5 //3 5 6 //3 6 4 //4 6 2 //5 6 6
默默地学习,笨笨地成长!更多精彩内容欢迎大家关注微信公众号小果果学长,和你一起成长和学习哦!
用贪心算法求解最小生成树相关推荐
- 贪心算法求解TSP问题(python)
这里使用贪心算法求解TSP问题的python版本 # dist 为距离矩阵,start_index 为起始位置 def tsp_quick(dist: list, start_index: int): ...
- 基于贪心算法求解TSP问题(JAVA)
前段时间在搞贪心算法,为了举例,故拿TSP来开刀,写了段求解算法代码以便有需之人,注意代码考虑可读性从最容易理解角度写,没有优化,有需要可以自行优化! 详细 代码下载:http://www.demod ...
- 背包问题贪心算法求解
题目 有一个背包,背包容量是M=150.有7个物品,物品可以分割成任意大小. 要求尽可能让装入背包中的物品总价值最大,但不能超过总容量. 思路 具有最优子结构性质和贪心选择性质.只要是所有物品的总重量 ...
- tsp java_基于贪心算法求解TSP问题(JAVA)
前段时间在搞贪心算法,为了举例,故拿TSP来开刀,写了段求解算法代码以便有需之人,注意代码考虑可读性从最容易理解角度写,没有优化,有需要可以自行优化! 一.TPS问题 TSP问题(Travelling ...
- 贪心算法 背包问题代码 c语言,用贪心算法求解普通背包问题的C++代码
用贪心算法求解普通背包问题的C++代码 2019年3月6日 125次阅读 来源: 贪心算法 #include #define M 100 void display(int &n,doubl ...
- C++贪心算法求解找零钱问题(很形象)
贪心算法求解找零钱问题 1.什么是贪心算法? 贪心算法是一种策略,总是做出在当前看来是最好的选择,总结出来几个字:寻找最优解 举个例子来说就是:"有一个只能往前走的果园,里边有各种水果让你免 ...
- 贪心算法求解 TSP 旅行商问题及其实现
文章目录 一.TSP 概述 1. TSP 2. 数学模型 3. TSP分类 二.贪心算法 1. 算法思路 2. 算法框架 3. 问题 三.贪心算法求解 TSP 一.TSP 概述 1. TSP 旅行商问 ...
- 贪心算法求解一个序列中出现次数最多的元素问题
贪心算法求解一个序列中出现次数最多的元素问题 题目: 指定n个正整数,编写一个实验程序找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入描述:输入的第1行只有一个正整数n(1 ...
- 贪心算法 背包问题 java_贪心算法求解背包问题
一.贪心算法 1.贪心算法概念 贪婪算法(Greedy algorithm)是一种对某些求最优解问题的更简单.更迅速的设计技术.用贪婪法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测 ...
- 用动态规划和贪心算法求解割绳子问题
题目描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m.n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],-,k[m].请问k[1]x-xk[m]可能的最 ...
最新文章
- 模具和java哪个好_93年,本科毕业一年(模具专业),想学Java转行怎么样?
- 2023年中国AI论文影响力超越美国?网友:长期看,数量不等于质量
- Python模块EasyGui专题学习
- Crawler:基于BeautifulSoup库+requests库+伪装浏览器的方式实现爬取14年所有的福彩网页的福彩3D相关信息,并将其保存到Excel表格中
- 剖析——移动构造函数
- PopupMenu控件的使用
- python并发处理机制_Python并发处理
- 【金三银四】MySQL优化面试题(2021最新版)
- 基于java小区物业管理系统(含源文件)
- html中怎样把背景图片置顶,HTML5中背景图片如何设置
- 计算机网络拓扑结构 教案,计算机网络拓扑结构获奖教案.docx
- svg 可视化操作_使用SVG和D3可视化浏览指标
- 建造者模式(Builder)---创建型
- zabbix_get [71696]: Check access restrictions in Zabbix agent configuration
- android gridview日历,Android使用GridView实现日历的方法
- 浅谈百度地图的简单开发之引入基本地图以及修改地图样式(一)
- 研报网站waitu.com介绍
- 栈,队列(纸牌游戏,小猫钓鱼)
- 复习3-三栏布局/htttp/判断登录
- #009#献给阿尔吉侬的花束