问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

最小生成树在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种求解算法多种

发布网友 发布时间:2022-05-29 07:47

我来回答

1个回答

热心网友 时间:2023-10-11 14:59

//////////////////////////////////////////////////////////////////////////
// function: 最小生成树问题
// 设计要求:在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。存储结构采用多种。求解算法多种。(带权的树图)
// Auther:卢燕
// Date:2015-1-5
//////////////////////////////////////////////////////////////////////////
const float maxValue=FLOAT_MAX;
template<class T,class E>
struct MSTEdgeNode
{
int tail,head;E key;
MSTEdgeNode():tail(-1),head(-1),key(0){}
bool operator<=(MSTEdge Node<T,E>&R) {return key <= R.key;}
bool operator>(MSTEdge Node<T,E>&R) {return key > R.key;}
};
template<class T,class E>
class MinSpanTree
{
protected:
MSTEdgeNode<T,E> *edgevalue;
int maxSize,n;
public:
MinSpanTree(int sz=DefaultSize-1);MaxSize(sz),n(0)
{
edgevalue=new MSTEdgeNode<T,E>[sz];
}
int Insert(MSTEdgeNode & item);
};
//////////////////////////////////////////////////////
//Kruskal算法的实现
#include"heap.h"
#include"UFSets.h"
template<class T,class E>
void Kruskal(Graph<T,E> & G,MinSpanTree<T,E>& MST)
{
MSTEdgeNode<T,E>ed;
int u,v,count;
int n=G.NumberOfVertices();
int m=G.NumberOfEdges();
MinHeap<MSTEdgeNode<T,E>>H(m);
UFSets F(n);
for(u=0;u<n;u++)
for(v=u+1'v<n;v++)
if(G.getWeight(u,v)!=maxValue)
{
ed.tail=u;ed.head=v;
ed.key=G.getWeight(u,v);
H.Insert(ed);
}
count=1;
while(count<n)
{
H.RemoveMin(ed);
u=F.Find(ed.tail);
v=F.Find(ed.head);
if(u!=v)
{
F.Union(u,v);
MST.Insert(ed);
count++;
}
}
};
/////////////////////////////////////////////////////
///Prim的算法实现
#include"heap.h"
template<class T,class E>
void Prim(Graph<T,E> & G,const T u0,MinSpanTree<T,E>& MST)
{
MSTEdgeNode<T,E>ed;
int i,u,v,count;
int n=G.NumberOfVertices();
int m=G.NumberOfEdges();
int u=G.getVertexPos(u0);
MinHeap<MSTEdgeNode<T,E>>H(m);
bool Vmst=new bool[n];
for(i=0;i<n;i++) Vmst[i]=false;
Vmst[u]=true;
count=1;
do
{
v=G.getFirstNeighbor(u);
while(v!=-1)
{
if(Vmst[v]==false)
{
ed.tail=u;ed.head=v;
ed.key=G.getWeight(u,v);
H.Insert(ed);
}
v=G.getNextNeighbor(u,v);
}
while(H.IsEmpty()==false && count<n)
{
H.RemoveMin(ed);
if(Vmst[ed.head]==false)
{
MST.Insert(ed);
u=ed.head;Vmst[u]=true;
count++;break;
}
}
}while(count<n);
};
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
煤气管道改造多少钱 皮革沙发套怎么清理呢? 如何清理白色沙发 诚如神之所说游戏介绍 关于真三国无双4的一个问题 几个关于真三国无双4的问题 真三国无双4猛将传的一个小小的问题!! 真三国无双4的一点小问题! 真3国无双4猛将转问题 真三国无双4一些新手问题!请高手一一解答! 4个问题!说好的话加100... 如何根据网络邻接矩阵,画出一棵最小生成树,求解答分析过程,要比较详细,最好截图。 第(2)小题。 高一语文课文中的相信未来一课,诗题“相信未来”有几层含义?请结合诗歌作简要说明。要简短扼要的。 最小生成树 C语言算法求解:对任意给定的网络(顶点数和边数自定),设计算法生成它的最小生成树。 简单解释一下什么叫最小生成树和权值,快 啊啊啊啊啊,创新声卡和动圈麦天津河西哪里有卖 请构造下图所示网络最小生成树 天津哪有卖外置声卡的 田边小河边红梅花儿开是什么歌的歌词 苏联老歌,里头有一句红梅花儿开少女的思念一点没咸少,这歌叫哈明 是否还能想起此刻的相爱 ,青春不复返,时间不在回 歌词是哪首歌曲? 天天酷跑最早的四连跳都人物是谁 绍兴富盛镇距离江西省景德镇高新区多少公里 白金小帅过后是什么人物 景德镇市高新开发区陶瓷工业区A-06号是什么厂家?联系方式是什么?急急,谢谢提供答案的哥哥姐姐 我就想知道白金小帅下来是什么人物,技能是什么。求求你了。 景德镇市春晓墙材有限公司高新区分公司怎么样? 婺源至景德镇气车途经高新区吗 天天酷跑白金小帅是什么现实职业 景德镇昌江区有哪些街道 机会网络中路由用到最小生成树吗 已知一个如图所示的带权网络图,使用克鲁斯卡尔算法构造该图的最小生成树 以下哪些属于企业战略的特点?/ .[简答题] 运用kruskal算法求出下面网络的最小生成树 &#xFFFC; 秋葵日式土豆泥需要用到哪些方法做出来更美味? 天津市南开区赛博数码广场b112 这家戴尔店靠谱吗 急!(最小生成树问题)请教高手!! 在&quot;相信未来&quot;中用孩子的笔体写下&quot;,有什么含义?三次&quot;写下:相信未来&quot;有什么变化?表达了诗人怎样的思想感... 请问日式的土豆泥怎么做才好吃! 浙教版高一语文必背文言文和古诗如果是节选的请注明下 55年转业,工资72元是啥级别? 1955年中国的1000元和现在的钱有什么区别 1955年行政级别3级的工资是多少钱 无锡钳工证 怎么样从朋友那里获取另一个为朋友的? 我在无锡钳工及铣床磨床工作了6年,如何考取职业资格证书。 如何获得微信里朋友的 我想要加一个朋友的微信,都是我不知道他的和手机号,怎样才能加呢? 我学的是钳工 现在打算 去江苏 无锡 那里 学些钳工的技术,去那里怎么样 怎么加朋友