急求KRUSKAL算法求最小生成树过程演示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求KRUSKAL算法求最小生成树过程演示相关的知识,希望对你有一定的参考价值。

(一)主要内容

以合适方便的方式输入一个边带权值的无向图,采用合适的存储结构存储该无向图. 然后根据KRUSKAL算法求该无向图的最小生成树并输出。

(二)要求:
1、输入无向图的方式要尽量简单方便
2、要能够形象方便地观察无向图的图形结构
3、要能够形象地演示KRUSKAL算法求最小生成树的过程
4、独立完成系统的设计、编码和调试。
5、系统利用C语言实现。
6、按照课程设计规范书写课程设计报告。
各位帮忙啊
谢谢,百度名就是我的QQ

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct road

int st;
int ed;
int w;
;
road all[900];
int A[30];
int cmp(const void *a,const void *b)

return (*(road *)a).w - (*(road *)b).w;

int find(int x)

if (x != A[x])
A[x] = find(A[x]);
return A[x];

int main()

int i,j,k,q,p,m,n,sum;
char s,e;
while (scanf("%d",&n) != EOF)

if (n == 0) break;
memset(A,0,sizeof(int));
for (i = 1;i <= n;i++)
A[i] = i;
m = 0;
for (i = 1;i < n;i++)

scanf(" %c%d",&s,&p);
while (p--)

scanf(" %c%d",&e,&q);
all[m].st = s - 'A';
all[m].ed = e - 'A';
all[m].w = q;
m++;


qsort(all,m,sizeof(all[0]),cmp);
k = 0;sum = 0;
while (k < m)

all[k].st = find(all[k].st);
all[k].ed = find(all[k].ed);
if (all[k].st != all[k].ed)

sum += all[k].w;
A[all[k].st] = all[k].ed;

k++;

printf("%d\n",sum);

system("pause");
return 0;
本回答被提问者采纳

Prim算法和Kruskal算法求最小生成树

老师发群里的一本书,在网上都没有发现比这个更加详细的讲解了,放上两种算法讲解的截图:

 

 

以上是关于急求KRUSKAL算法求最小生成树过程演示的主要内容,如果未能解决你的问题,请参考以下文章

Kruskal算法和Prim算法构造它的一棵最小代价生成树的过程

prim和kruscal算法得到的最小生成树是不是一样

技术图文:如何利用C# 实现 Kruskal 最小生成树算法?

最小生成树 普里姆算法有问

图的最小生成树算法(Prim和Kruskal)

Prim算法和Kruskal算法求最小生成树