|
|
发表于 2009-4-25 22:23:50
|
显示全部楼层
学习了.谢谢
& j" r3 l2 h: @, F+ M) m+ k/*全局变量:访问标志数组*/
4 }, _: p) _$ X5 I! _4 k4 vint visited[M];
1 C5 j& ~" D6 M' V( i3 M; K- j/*访问顶点*/5 x! q# `, r! q+ _3 R9 q
void visitvex(Graph *g,int vex)! W& N+ |' ~4 I# G$ S) H
{
! Y% Z2 w: w# ` S' wprintf("%d ",g->V[vex]);7 J7 C# {9 i2 Y* @8 @) W7 y1 M
}
! u& L5 F, c0 d3 y% v8 N
2 U+ k. l" ^. H. N/*获取第一个未被访问的邻接节点*/
& X: `4 `# c4 ^! S; {int firstadjvex(Graph *g,int vex) v) @3 D8 I$ Y. E7 x$ w
{# K r+ e" Y+ V0 v
int w,i;
3 L Q+ r% }7 [6 s& m r. Q& Nfor(i=1;i<=g->vexnum;i++)- U' ~) ]2 {- |+ g" ~0 a6 Y8 C
{2 x4 h8 g3 q# u B( G. }" l
if(g->R[vex][i]==1&&visited[i]==0)+ X: _+ B* e9 D' l8 m% y4 m
{
( {- P( v4 ]( z7 u9 e w=i;
c4 j( u) c! ~3 `& Y2 M break;
6 i& O( R- q; x- u5 V } v3 K$ x3 U( F$ J$ {% ?
else& A Z; t; ~1 [! ]
{, b' p6 V$ H+ N0 Y0 n6 p
w=0;
% W9 _) f o( F% i8 @* r# y: \% V }
* Y+ r6 M4 B F; h6 Z2 q3 R }3 c+ j- ~/ b2 x# ]
return w;
/ Y: O" i2 m! E% A3 P. X) M}( ^- {' H% `8 u v- s
/*获取下一个未被访问的邻接节点(深度遍历)*/$ B9 Y1 E* ]& J- b( p% A
int nextadjvex(Graph *g,int vex,int w)
) ?; k- ^1 [% w{
9 F5 z$ B" D' z: o1 y7 O int t;
. z9 k5 M3 v) O/ \0 L p t=firstadjvex(g,w);" l) U8 G* h9 f, K# e/ t/ [
return t;& e p& @) j; a7 m j) V: y
}" i* l. f$ F6 F% f1 E- w$ S
/*深度递归遍历*/
N- `1 q" r/ ~) W& @ void dfs(Graph *g,int vex); t* d" ~8 s, n3 ~, d' q8 G$ O
{
3 i) q* r( u5 H8 b int w;
) ^# y( w2 R) b# |: z( H: { visited[vex]=1;0 @! r' r; C( ^
visitvex(g,vex);) e: A( Z" Y/ X# a- j/ K, ^
for(w=firstadjvex(g,vex);w>0;w=nextadjvex(g,vex,w))
1 O+ k8 j# s' Z! }9 g$ _1 j if(!visited[w])- `1 p3 y7 [$ `: J( u2 e0 D
{
, l! z# }+ r% ]" mdfs(g,w);5 A( v1 U1 i! B: M, H6 \; z
}1 c. y6 ~0 Q% O. j/ l7 h% G3 ]
}- p4 B0 f( \7 a+ \' A7 G" R
/ G9 k6 `. {0 A8 Q+ m+ k2 j
void dfstraverse(Graph *g)* O% p% p3 s! |) O# j
{4 |7 d+ N, \8 f9 Z' t
int i;
5 e3 I7 Y; h w) h8 h for(i=1;i<=g->vexnum;i++)
8 q5 j( t$ e1 _# S( p+ B visited[i]=0;
: L8 ]- O& _. V7 o# `7 ` for(i=1;i<=g->vexnum;i++)$ k( [0 ]' F) L2 R
if(!visited[i]): f6 J4 k& s8 v3 ?+ Y! N
{dfs(g,i);}
6 [/ _% [, A6 T8 C- z } |
|