永发信息网

利用kruska,prim算法求解图的最小生成树,并比较算法的效率

答案:2  悬赏:60  手机版
解决时间 2021-02-25 20:06
这是我们的一个作业,要用C++编写,我不太会,希望哥哥姐姐们帮帮小弟,不胜感激!
最佳答案
adjmatrix GA 邻接矩阵GA
struct edgeset
{
int fromvex; 起始点
int endvex; 终点
int weight; 权值
}
void prim(adjmatrix GA,edgeset CT,int n)
{
int i,j,k,min,t,m,w;
for(i=0;i {
CT[i].fromvex=0;
CT[i].endvex=i+1;
CT[i].weight=GA[0][i+1];
}
for(k=1;k {
min=10000000; m=k-1;
for(j=k-1;j if(CT[j].weight {min=CT[j].weight; m=j;}
edge temp=CT[k-1];
CT[k-1]=CT[m];
CT[m]=temp;
j=CT[k-1].endvex;
for(i=k;i {
t=CT[i].endvex; w=GA[j][t];
if(w {
CT[i].weight=w; CT[i].fromvex=j;
}
}
}
}

void Kruckal(engeset GE,edgeset CT,int n)
{
int i,j;
bool**s=new bool**[n];
for(i=0;i s[i]=new bool[n];
for(i=0;i {
for(j=0;j if(i==j) s[i][j]=true;
else s[i][j]=false;
}
int k=1,d=0,m1,m2;
while(k {
for(i=0;i {
if(s[i][GE[d].fromvex]==true) m1=i;
if(s[i][GE[d].endvex]==true) m2=i;
}
if(m1!=m2)
{
CT[k-1]=GE[d]; k++;
for(j=0;j {
s[m1][j]=s[m1][j]||s[m2][j];
s[m2][j]=false;
}
}
d++;
}
for(i=0;i delete[]s[j];
delete[]s;
}
就这么多了kruckal算法的复杂度是O(n*n+n+lgn)
prim 算法的复杂度是O(n*n);
全部回答
我不会~~~但还是要微笑~~~:)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
杨子江在哪个省
怎样计算负债总额?
汤川乡地址有知道的么?有点事想过去
粤sw046c这个车牌号好不好
CYC更衣室在哪里啊,我有事要去这个地方
1929—1933年,经济大危机对世界产生深远影响
济源哪里可以摆地摊
三棵树大桶实惠家用乳胶漆
新华眼镜店在什么地方啊,我要过去处理事情
2o16年5月份建房子开工吉日
、帮我分析一下空调制热效果差的原因 空调海
急!!!用上毫不相让,从容不迫,扬长而去,架
考热能工程师证需要哪些书籍?
智能连体手机进了牛奶喇叭声音小且有点杂音,
红山塘地址在哪,我要去那里办事
推荐资讯
提示语都有哪些语言
数字信号采集分析
东莞常平友谊男科医院怎么样呢
大概是因为什么而我姓练
关于总的成语有哪些
56乘102简便计算
盆腔炎性疾病后遗症职工医保能保销吗
环境影响评价资格证书分为哪两个登记资格
样本量什么意思
索菲亚壁纸在哪里啊,我有事要去这个地方
iphone4微博怎么屏幕返回
已知f(x)=2x+1,g(x)=x^2+2若f[g(a)]=g[f(a)]
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?