- 在线时间
- 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>3 Y" G7 C- V8 X% b1 i7 g! D
#include <string.h>; ~2 }5 U0 |+ s5 \
struct stack
, _5 r8 |8 E# h; g) R2 g A2 L{int top , node[210];} f; //顶点的堆栈
+ w3 K* M3 T5 [8 @$ u5 y. Qint a[201][201]; //图的邻接矩阵. l2 G: a- N' @ c: S
int n;8 U* E) T+ w4 Q8 m
void dfs(int x) //图的深度优先遍历! E, B* t/ x8 e7 f1 Y C9 J
{int i;
2 _8 e1 R9 j. z' _, t7 k" Sf.top ++; f.node[f.top] = x;
8 A" u* A1 W: y9 a# Qfor (i = 1; i <= n; i ++)
3 H C% V/ M! X) ?- iif (a[i][x] > 0)! W% |/ B4 l. j" r4 Z$ d6 L" H
{ a[i][x] = 0; a[x][i] = 0; //删除此边
]: Q2 s9 x8 H+ ?* J' X6 H6 J; odfs(i);
) V4 ]6 T# z6 d: Pbreak; }
* J4 a3 Q0 O: ^; ^2 z2 e/ u- @}
4 s4 o2 H, u2 n; xvoid Euler(int x) //欧拉路算法
, |$ w* `2 [ w7 i! ?5 d* K8 d{int i , b;# d* \5 u$ v# W. P+ K T
f.top = 0; f.node[f.top] = x; //入栈- `- M4 I' g; {. g/ o
while (f.top >= 0): U3 \1 p1 K! @' l1 T z
{b = 0;
+ @2 b. F% v+ m8 U. i4 } for (i = 1; i <= n; i ++) 5 ^5 H# }, @3 k% G+ T- M
if (a[f.node[f.top]][i] > 0)
, F6 i3 r D8 t( D5 Y% D{b = 1; break;}/ S2 w$ s/ |3 d) S7 N) K! l! `) F' J2 e
if (b == 0) //如果没有点可以扩展,输出并出栈* H" r/ _: l3 w3 n& O& T
{ printf("%d " , f.node[f.top]);8 ~3 p2 Q% |0 V. }; Z
f.top --;}' U( w; [4 o; e/ G
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
3 q1 w0 ^6 ?7 O9 ~* S! p7 E& s}% }. a6 \" X7 N/ }
}
, z5 v" |8 K! d/ Y+ i, L* ~: Iint main()
# P) w7 O8 A/ P+ D5 ~* k{
5 R. k4 K7 o9 Fint m , s , t , num , i , j , start;
0 E4 \) k( k' t. d //input1 }: }" C4 N0 q% y2 j
scanf("%d %d" , &n , &m); //n顶点数 m边数
1 M! y, i Z! ymemset(a , 0 , sizeof(a));
6 Q* E! m. j/ O! a for (i = 0; i < m; i ++). G7 X# M. X! u8 a. }3 v, @& n
{printf("innput s,t");
, v; G5 c1 g: c G# _ scanf("%d %d" , &s , &t);: I% X7 X( U( p4 J# f' K1 _! | o
a[s][t] = 1; a[t][s] = 1;6 k& _4 S( Q' j$ K$ [/ m
}
* U) f( R: M9 Q) ^% N //判断是否存在欧拉回路- \8 A+ F2 b0 i
s = 0; start = 1;
& J( G8 h6 W+ V% W for (i = 1; i <= n; i ++)' G& l1 {, W9 F* k7 s
{num = 0;( t4 F0 w# b! U$ Z3 ~
for (j = 1; j <= n; j ++)
) N0 M- w: V9 M% U* v num += a[i][j];
5 g0 c. O" H6 Q c. D if (num % 2 == 1)
5 q8 Y2 m9 I- |2 i- c{start = i; s ++;}
7 L S E. d6 o}4 V% ?- A/ ?: G. n' u+ R8 n3 z
if ((s == 0) || (s == 2)) ) T8 m l; Q- f' c" S. R
Euler(start);/ i+ H! H( {# f$ L5 U) x
else printf("No Euler path\n");
2 u3 {$ ^' U/ n) s! ngetchar(); getchar();/ { t/ }$ s5 @ H
return 0; } |
|