急求KRUSKAL算法求最小生成树过程演示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求KRUSKAL算法求最小生成树过程演示相关的知识,希望对你有一定的参考价值。
(一)主要内容
以合适方便的方式输入一个边带权值的无向图,采用合适的存储结构存储该无向图. 然后根据KRUSKAL算法求该无向图的最小生成树并输出。
(二)要求:
1、输入无向图的方式要尽量简单方便
2、要能够形象方便地观察无向图的图形结构
3、要能够形象地演示KRUSKAL算法求最小生成树的过程
4、独立完成系统的设计、编码和调试。
5、系统利用C语言实现。
6、按照课程设计规范书写课程设计报告。
各位帮忙啊
谢谢,百度名就是我的QQ
#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算法构造它的一棵最小代价生成树的过程