图的最小生成树

如图所示采用图形化形式显示原图(其中一个测试用例采用上图),并采用动画效果一步一步的显示Kruskal算法求得的最小生成树不论C++,C,JAVA都可,请各位高手帮帮忙可... 如图所示
采用图形化形式显示原图(其中一个测试用例采用上图),并采用动画效果一步一步的显示Kruskal算法求得的最小生成树
不论C++,C,JAVA都可,请各位高手帮帮忙
可将答案发到我的邮箱youjits@126.com,谢谢了
展开
 我来答
帐号已注销
推荐于2016-08-18 · 超过12用户采纳过TA的回答
知道小有建树答主
回答量:21
采纳率:0%
帮助的人:40.1万
展开全部
Kruskal算法:每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct
{
int x, y;
int w;
}
edge;
edge e[MAX];
int rank[MAX];
int father[MAX];
int sum;
int cmp(const void *a, const void *b)
{ if ((*(edge *)a).w == (*(edge *)b).w)
{
return (*(edge *)a).x - (*(edge *)b).x;
}
return (*(edge *)a).w - (*(edge *)b).w;
}
void Make_Set(int x)
{
father[x] = x; rank[x] = 0;
}
int Find_Set(int x)
{
if (x != father[x])
{
father[x] = Find_Set(father[x]);
}
return father[x];
}
void Union(int x, int y, int w)
{
if (x == y) return;
if (rank[x] > rank[y]) //将秩较小的树连接到秩较大的树后
{
father[y] = x;
}
else
{
if (rank[x] == rank[y])
{
rank[y]++;
}
father[x] = y;
}
sum += w;
}
int main() // 主函数
{ int i, n;
int x, y;
char chx, chy;
printf("图的边数为:\n");
scanf("%d", &n);
getchar();
printf("每条边和权值分别为:\n");
for (i = 0; i < n; i++)
{
scanf("%c-%c %d", &chx, &chy, &e[i].w); //1-2 6 这是你需要输入的
getchar();
e[i].x = chx - 'A';
e[i].y = chy - 'A';
Make_Set(i);
}
qsort(e, n, sizeof(edge), cmp);
sum = 0;
for (i = 0; i < n; i++)
{
x = Find_Set(e[i].x);
y = Find_Set(e[i].y);
if (x != y)
{
printf("边%c-%c 权值: %d\n", e[i].x + 'A', e[i].y + 'A', e[i].w);
Union(x, y, e[i].w);
}
}
printf("最小生成树权值之和:%d\n", sum);
return 0;
}

在VC6.0上运行测试成功,希望可以帮到你,祝你好运!
AiPPT
2024-09-19 广告
在北京饼干科技有限公司,我们致力于提供便捷高效的办公解决方案。关于AIPPT制作,我们虽不直接提供软件服务,但深知市场上有众多免费或成本效益高的PPT制作工具可供选择。用户可通过在线平台或软件市场轻松获取,享受从模板选择到内容编辑的一站式免... 点击进入详情页
本回答由AiPPT提供
爱你不是很累
2010-11-29
知道答主
回答量:10
采纳率:0%
帮助的人:4.3万
展开全部
你是UESTC的。。?我写好了。。但如果你是UESTC的就不行了。。因为我也是。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lx17951
2010-11-30
知道答主
回答量:18
采纳率:0%
帮助的人:12.1万
展开全部
50分?有难度 这个几分钟搞不定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式