} }
sort(edges, G);
for (i = 1; i <= G->arcnum; i++) {
parent[i] = 0; }
printf(\最小生成树为:\\n\ for (i = 1; i <= G->arcnum; i++) {
n = Find(parent, edges[i].begin); m = Find(parent, edges[i].end); if (n != m) {
parent[n] = m;
printf(\%d, %d >> edges[i].end, edges[i].weight);
} } }
int Find(int *parent, int f) {
while ( parent[f] > 0) {
f = parent[f]; }
return f; }
int main(void)
- 6 -
%d\\n\edges[i].begin, {
MGraph *G;
G = (MGraph*)malloc(sizeof(MGraph)); if (G == NULL) {
printf(\ exit(1); }
CreatGraph(G);
MiniSpanTree(G);
system(\ return 0; }
- 7 -
运行结果:
五、实验总结(结果分析和体会)
在编程时,因为考虑的情况比较多,所以容易造成错误和遗漏,为了避免这些问题的出现,可以先用笔把所有的程序在纸上,然后再根据列表编写程序,这样不仅简单易懂,还避免了一些不必要的错误。
编写完程序后进行调试,发现有很多错误,其中也不乏一些基本的小错误,所以程序写完后进行静态检查是必不可少的,其次是逻辑上的错误,对于这些错误,只能再认真检查整个程序,这就要求我们在编程时考虑要周到,或者可以请其他同学帮忙检查。
通过这次对算术表达式求值的设计,让我自己对克鲁斯卡尔算法的运用更深刻,能够基本上很好的运用克鲁斯卡尔算法来解决一些问题。不过从中也发现了很多问题,那就是虽然课本知识的掌握还不错,但是上机编程的能力还有所匮乏,应该加强这方面的锻炼,通过上机的实践来提升对基础知识的理解。还有就是应该多和同学交流,比如一个相同的问题,我有我的编程思路,他有他的,通过相互的交流、讨教,可以获得更广的知识信息,开拓思维,自己不懂的通过咨
- 8 -
询就可以掌握。
- 9 -