- 在线时间
- 9 小时
- 最后登录
- 2012-10-15
- 注册时间
- 2010-3-30
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 80 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 53
- 相册
- 0
- 日志
- 0
- 记录
- 1
- 帖子
- 53
- 主题
- 0
- 精华
- 0
- 分享
- 0
- 好友
- 4
升级   50.53% 该用户从未签到
- 自我介绍
- 数学的一个懵懂者。
|
#include <stdio.h>+ e1 K; o" m" V4 t
#include <string.h>% W, \! M* J5 P0 q
struct stack
- L! w% U* p6 [9 ?' R. V{int top , node[210];} f; //顶点的堆栈
/ x) o% N C$ O4 V: ^: s G# Xint a[201][201]; //图的邻接矩阵+ H9 T8 ]- X/ W% X) @: e
int n;% Z: j$ e u3 v8 G
void dfs(int x) //图的深度优先遍历
3 }: M8 s; z5 R R$ a{int i;4 J% G* ?3 N- R% c# }
f.top ++; f.node[f.top] = x;! I+ w/ p2 f7 R9 ]: `5 W2 W. _) \
for (i = 1; i <= n; i ++)9 d- C8 z, _6 b; X- b" M6 ^
if (a[i][x] > 0)
! ]. u# c8 W! }4 [' { { a[i][x] = 0; a[x][i] = 0; //删除此边5 F' H6 u7 K4 L4 y6 T3 G
dfs(i);* d$ }! B1 r# @" q7 H% Z' |7 q0 C9 {3 h
break; }$ m) v( _ F) a I Z \3 Z
}' ~4 W6 e E$ A3 R- U6 }
void Euler(int x) //欧拉路算法, {7 k2 u" f( K9 z. I
{int i , b;7 D L5 \: E. v) _2 J- r
f.top = 0; f.node[f.top] = x; //入栈, R t* c! B6 t% Z
while (f.top >= 0)
* _6 ^, E) o+ @- F; q/ v{b = 0;
- C' s+ N) p# \4 s( ^2 p/ k for (i = 1; i <= n; i ++)
- ]% u4 C: x& |8 k5 R) Tif (a[f.node[f.top]][i] > 0)
: A; E, A' r( d' r8 r2 |{b = 1; break;}5 F# f* p5 i" f/ \0 ~
if (b == 0) //如果没有点可以扩展,输出并出栈7 a, y2 D& ]/ G- r7 D& V
{ printf("%d " , f.node[f.top]);
& N9 y; U, F. j N6 J' i) b f.top --;}) l5 R! o* _5 R! }
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS+ g) w6 i" m, {# Q. t
}1 h. u8 C/ \: q; X
}
8 {# w- x: B( A- ]8 E4 z3 K% kint main()2 n/ x, w6 E1 ~
{' t. A' F( x/ O3 [. u
int m , s , t , num , i , j , start;3 ~" F! N' S" O. D' E1 R) X
//input8 ~7 U: m5 M+ l; k- [! A; b8 w
scanf("%d %d" , &n , &m); //n顶点数 m边数
) n+ b c% x0 i; J1 x' b! Umemset(a , 0 , sizeof(a));: V/ ~. B; E! w) T
for (i = 0; i < m; i ++)
+ }$ W/ v) e7 |% M) }/ D{printf("innput s,t");8 @. A: h' { r: s% l' N
scanf("%d %d" , &s , &t);8 ?- t- ?, A, S
a[s][t] = 1; a[t][s] = 1;
4 G4 R! q) s d w& B! Y$ y9 q h1 o}% I$ D2 _" V: i2 h; u" `: K: A' W
//判断是否存在欧拉回路
& f% f7 o( T0 i B& D* a- s* ?s = 0; start = 1;4 w# g" f) S/ `6 C D( D2 m3 _
for (i = 1; i <= n; i ++)
4 i6 u% ~# {1 w) z* w4 R7 y4 n, Z{num = 0;/ | V$ E( l I' X4 ?/ T2 H! S8 h3 z1 F
for (j = 1; j <= n; j ++)8 b& n" @ r( y2 q" v9 B7 x0 D
num += a[i][j];1 w# ?+ a# x2 f- Q& `- q
if (num % 2 == 1) 2 }7 h% c+ h, j1 K* c E
{start = i; s ++;}1 R, b7 Q& T, i5 Z0 J
}! @7 d, S6 `2 Q4 e! l5 U7 k
if ((s == 0) || (s == 2))
! r$ A# L7 D8 w1 [Euler(start);0 \; X7 ?2 I5 t) p( C3 ?; o$ D
else printf("No Euler path\n");
8 J0 v# F) e% K2 _6 c3 jgetchar(); getchar();4 J' W$ i2 ~. w: B! a
return 0; } |
|