|
|
发表于 2009-4-25 22:23:50
|
显示全部楼层
学习了.谢谢, ^& [) D' h M
/*全局变量:访问标志数组*/; a5 t/ m7 b6 X
int visited[M];
, N2 K5 ~+ i9 O# d, \/*访问顶点*/8 }& Z( D7 G2 z* C
void visitvex(Graph *g,int vex)
1 X. J! L- T# X/ C0 J2 m4 p{0 T+ K' w- [7 j/ E6 b+ ~
printf("%d ",g->V[vex]);+ ?. f3 z6 |9 \" ?" M2 V
}! y* n; `1 I5 M% j" U% O$ ^) a4 G9 i4 ^
& D T, ]& z' _- R7 Z' m0 n
/*获取第一个未被访问的邻接节点*/6 S' `* J) p8 R4 Z% g( [$ B$ N
int firstadjvex(Graph *g,int vex)
3 p5 n0 K" G$ G: O: U. J& A$ ^! `9 v3 e{
& w8 X' G" m& z" V2 ^' c9 D- Sint w,i;; {7 O1 f9 Y1 l9 p
for(i=1;i<=g->vexnum;i++)3 | ~! w1 h1 I4 w
{
! E' E$ m# J9 n2 |2 ?3 Y$ ^ q" L( | if(g->R[vex][i]==1&&visited[i]==0). J' b3 x/ `% h* @0 _, N3 G2 @
{; J# }, N. \3 @# f8 x5 q
w=i;
: y% P8 A* T% m' j- ^$ [ break;) Y, ?3 [7 g6 V: h. }
}( ~6 m& M. s, K
else
! N- x4 o% b+ ^% i9 r {5 s" v0 r+ U- n1 f- o! y9 `8 z c
w=0;
$ h: _( {1 d( q }
* N0 f) V3 x1 Y! T0 O5 l }" k" T, Y7 @7 {3 _
return w;" V/ ^7 H/ e5 r3 M2 ]2 Z; c
}
& x' q# N! a R+ E& ^) e/*获取下一个未被访问的邻接节点(深度遍历)*/, E& ]1 w; z: [ x# `7 k3 P- p3 K1 Q
int nextadjvex(Graph *g,int vex,int w)) y) O r1 J8 ^! S
{* g; U) V4 p' t: v [% L, V5 r9 Q# A
int t;8 I% l6 |/ L/ T0 F: ]
t=firstadjvex(g,w);) u2 G- e, V# z: T
return t;) |+ a; `1 E$ m3 ~. G% i1 Q
}, u/ Q* B0 o/ n7 ]0 _* }
/*深度递归遍历*/
, t/ y6 w" D2 V void dfs(Graph *g,int vex)
" h' g2 R6 r6 n& _$ a" ?9 v {5 X9 B3 g& {- U3 J @, |9 `
int w;
4 w% F( F3 J+ z+ | visited[vex]=1;: E4 }* E. N* r' T H; ?
visitvex(g,vex);: r4 S& N" X) n9 \3 h1 S$ o5 N
for(w=firstadjvex(g,vex);w>0;w=nextadjvex(g,vex,w))
# Q: G2 N* ^+ c ^/ V9 c if(!visited[w])
! ^* u/ P) I/ ]$ d( y- e) V {, l3 j" Q" F8 \: J8 `/ ^
dfs(g,w);
: T5 d7 Z' R" \* U }
& Q6 @! U$ ^( E: O1 W2 o* Y }0 o( @7 K7 U9 h ?4 I
# ~- V1 ?* u# \ q' @3 r void dfstraverse(Graph *g)+ _, g' b+ r" q3 l9 ?. i4 E
{2 @/ ]) t3 E' o$ }% x: V
int i;6 n2 R7 a5 P" _2 a6 M
for(i=1;i<=g->vexnum;i++)
" }: ]# F. ?# z visited[i]=0;
% t5 T7 `* u3 c' D for(i=1;i<=g->vexnum;i++)' g8 ]( O; r, Z( E# E: A
if(!visited[i])
5 {, s, Z2 f t% B0 ` {dfs(g,i);}& y+ L$ T) m( }3 j8 A
} |
|