a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 150|回复: 3

[C语言] 2011年计算机等级考试二级C辅导实例编程(4)

[复制链接]
发表于 2012-7-31 21:48:08 | 显示全部楼层 |阅读模式
最小生成树之kruskal算法  1. Kruskal算法
6 p' o# r: o* {: r  (1) 算法思想  b+ @. P2 n$ V" n! x; v% V; B
  K r u s k a l算法每次选择n- 1条边,所使用的贪婪准则是:从剩下的边中选择一条不会产生环路的具有最小耗费的边加入已选择的边的集合中。注意到所选取的边若产生环路则不可能形成一棵生成树。K r u s k a l算法分e 步,其中e 是网络中边的数目。按耗费递增的顺序来考虑这e 条边,每次考虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环路,则将其抛弃,否则,将它选入。
' q! l: ?8 w  E, T# X. e' Y" R  初始时没有任何边被选择。边( 1 , 6)是最先选入的边,它被加入到欲构建的生成树中,得到图1 3 - 1 2 c。下一步选择边( 3,4)并将其加入树中(如图1 3 - 1 2 d所示)。然后考虑边( 2,7 ,将它加入树中并不会产生环路,于是便得到图1 3 - 1 2 e。下一步考虑边( 2,3)并将其加入树中(如图1 3 - 1 2 f所示)。在其余还未考虑的边中,(7,4)具有最小耗费,因此先考虑它,将它加入正在创建的树中会产生环路,所以将其丢弃。此后将边( 5,4)加入树中,得到的树如图13-12g 所示。下一步考虑边( 7,5),由于会产生环路,将其丢弃。最后考虑边( 6,5)并将其加入树中,产生了一棵生成树,其耗费为9 9。图1 - 1 3给出了K r u s k a l算法的伪代码。
6 [( x- R7 ]% o& S  (2)C代码
% t% B$ ]# v  G  U% d! M& j  /* Kruskal.c7 J- c7 ?/ t/ u
  Copyright (c) 2002, 2006 by ctu_85' B3 a; X. n9 P
  All Rights Reserved.  \/ T$ E. y& M& X& R4 Y7 G
  */
5 C3 k# a, n8 J! A# k1 \  /* I am sorry to say that the situation of unconnected graph is not concerned */4 e, {, P, [5 M
  #include "stdio.h"
" w. ]  J% O3 f5 U/ b0 X- s  #define maxver 10
" n( z4 s6 X3 S$ I4 x' X  #define maxright 100
  k3 A7 R& r9 x: \" v; K: N  int G[maxver][maxver],record=0,touched[maxver][maxver];
: W, ]- O1 @0 C" x# ~3 K  int circle=0;
5 e" |3 L8 b) e3 u3 y$ ^  int FindCircle(int,int,int,int);
! c0 p; F; a5 g, V8 D  int main()& e1 [$ `2 r, c0 C1 }
  {
4 y: g0 ~2 h7 d. \* F( F* B8 f& v  int path[maxver][2],used[maxver][maxver];
- [1 b) p9 ~  \. T6 X  int i,j,k,t,min=maxright,exsit=0;
( _" X# J0 ^2 p  T8 e  int v1,v2,num,temp,status=0;
+ [$ c& V5 S- C2 z) v  restart:
0 l1 @5 ?& {/ A, D, N. d. ?  printf("Please enter the number of vertex(s) in the graph:\n");
0 K, H: [6 t5 K  scanf("%d",&num);
, c# f4 W& B0 |
* r4 F4 }; Z% V3 O3 L4 C# G  if(num>maxver||num
回复

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:09 | 显示全部楼层

2011年计算机等级考试二级C辅导实例编程(4)

 }1 _8 Y7 z8 `# t' o
  for(j=0;j
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:10 | 显示全部楼层

2011年计算机等级考试二级C辅导实例编程(4)

 {   status=0;+ G0 U0 n7 p: T% z. C, R2 I

: }% j! X3 A' k: \  for(k=0;k
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-31 21:48:11 | 显示全部楼层

2011年计算机等级考试二级C辅导实例编程(4)

for(t=0;t
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-14 14:42 , Processed in 0.313020 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表