- 在线时间
- 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>
, x+ g2 ^1 ~6 a* N* e, F, l- {#include <string.h>
( x2 |8 O% G" Q& s" m, o1 bstruct stack) e- W% a" d- M, b1 D& A3 B
{int top , node[210];} f; //顶点的堆栈) x6 e" b+ M3 \" D
int a[201][201]; //图的邻接矩阵
" u3 f+ @5 G _* L/ Rint n;0 f! a1 A0 `2 l0 n. P# m* d m
void dfs(int x) //图的深度优先遍历
8 B. f5 o7 H/ i. ~ _2 D& @- ~{int i;
. t& [9 r2 `# ^( S6 gf.top ++; f.node[f.top] = x;
, {) g6 d0 A1 A4 A) }for (i = 1; i <= n; i ++)
$ E% [' K* b% H# Tif (a[i][x] > 0)( n1 S* S9 W, Q! V% K
{ a[i][x] = 0; a[x][i] = 0; //删除此边! h5 w7 O: v( c+ Z
dfs(i);
; D! Q3 l K3 s; S1 X6 l4 ^, b( Y9 Wbreak; }
$ J8 P" h5 h4 d( c$ n1 q4 O}8 X' C* F+ g) t d1 W& M; _, g
void Euler(int x) //欧拉路算法$ U" e0 h* u; @! G I" t! `3 O. |
{int i , b;
& Q- O' k1 ^: c1 F/ i* T$ yf.top = 0; f.node[f.top] = x; //入栈+ O' I+ ]6 W! g. z7 b2 i' l
while (f.top >= 0)) [5 X8 k1 V: L3 X W
{b = 0;0 m2 O( P) ~+ D2 ]
for (i = 1; i <= n; i ++) $ N* t7 N" Z5 F, R# m. O
if (a[f.node[f.top]][i] > 0)
0 o4 r- C2 E' q. r4 x u0 h{b = 1; break;}
( N$ L. V! E% w! P7 O% ^ if (b == 0) //如果没有点可以扩展,输出并出栈
. i" v+ j! W& k{ printf("%d " , f.node[f.top]);, M. @6 s# M w$ P! p) H
f.top --;}
7 C ^1 p, Z3 p3 C! M. w2 v" b2 E) gelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
* P; F' A$ q% r2 R* i}- M( |5 `9 x6 j2 n8 T6 e
}& A. k: }: I$ Z3 I3 N& u
int main()7 x2 H: X0 u, O; h
{
$ X" D. e$ h! K$ K7 aint m , s , t , num , i , j , start;
: R8 V8 o$ U# {& ?; n //input) x0 V! m, f# ]! [9 v( ]# h
scanf("%d %d" , &n , &m); //n顶点数 m边数0 L* o4 |) O8 g5 d3 ~/ w
memset(a , 0 , sizeof(a));! h$ x2 L$ o/ |7 @# v! ]7 o, P
for (i = 0; i < m; i ++)
2 l1 l' ], V) A4 `{printf("innput s,t");
) ?- A& q- _# S& F2 [. b9 Z scanf("%d %d" , &s , &t);
% x# V- n* I' x& Z0 c a[s][t] = 1; a[t][s] = 1;
8 D% O& f9 c* s+ R* R}# f" V! f9 E0 ^/ P0 |! N
//判断是否存在欧拉回路 |" C. f6 B+ f* u- r9 C2 z
s = 0; start = 1;6 }$ _% D" T( z% h* x
for (i = 1; i <= n; i ++)
" b1 |6 h4 {9 I) a' J4 g) B4 B6 I{num = 0;1 W) `6 g; H1 ^
for (j = 1; j <= n; j ++)
- I/ p6 T' ^' W( E: l6 N% g# o7 p num += a[i][j];5 u( h- ^# u* o( `. \/ n
if (num % 2 == 1)
# t# M6 {; m( ?{start = i; s ++;}
) L! I& } r/ S! o# s9 N/ B9 `9 ]}
0 M2 W; S4 _8 A1 vif ((s == 0) || (s == 2))
5 r1 \% O8 ^" o( g, Y& p' }Euler(start);' @. w: a, r, z" Z
else printf("No Euler path\n");$ o8 }, C' ?; y0 P1 ~, f
getchar(); getchar();# q# o8 ~3 n$ b$ O: x. p
return 0; } |
|