- 在线时间
- 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>
" z i5 T3 {. N#include <string.h>: ]# r1 E+ R5 o& U* b" }' z
struct stack' n |6 ^& G& a8 C% k
{int top , node[210];} f; //顶点的堆栈
5 o8 _* R+ q* S/ Y# \1 Qint a[201][201]; //图的邻接矩阵
; `+ F1 R! k8 S% \8 D6 k0 pint n;
* F5 S( W" w% Z, zvoid dfs(int x) //图的深度优先遍历
5 `) x4 l( a N{int i;( U: X ]: H! z. W; r! q
f.top ++; f.node[f.top] = x;
2 F' X4 l4 P! }- J) L! g6 Z# H) yfor (i = 1; i <= n; i ++)
6 B% q% M5 s$ _ {2 sif (a[i][x] > 0)
0 B; ~" n+ I) }* D% W, m! d" j { a[i][x] = 0; a[x][i] = 0; //删除此边
: A: `6 \; g [$ V; f7 O' kdfs(i);
, U! s0 h4 w- }/ O9 r/ y1 ?0 \break; }
# s, s% |+ G3 u0 n+ i! t}
4 [# i5 _+ b, }$ A" Ivoid Euler(int x) //欧拉路算法
[8 E% R" N; W* {: x% m{int i , b;" u% ], T- L+ E
f.top = 0; f.node[f.top] = x; //入栈( Z" f o( A1 M C$ j/ t' O
while (f.top >= 0)
. y4 m( N7 N- E{b = 0;: s/ U5 ~" B7 S& `
for (i = 1; i <= n; i ++)
! X" u; ^! o v) {% a' J4 Eif (a[f.node[f.top]][i] > 0)
3 s8 ]! }7 W+ f' _8 k# V- }{b = 1; break;}
% \* |6 o8 _8 ^' Y; B$ H+ n if (b == 0) //如果没有点可以扩展,输出并出栈
. }( _( S% W1 d) d{ printf("%d " , f.node[f.top]);% |! k" ^6 ]5 j
f.top --;}
4 I5 i9 F9 N6 aelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
9 }$ h- n( c; ?! P( u! O* u}
5 f, H6 @* C3 l- r# y# |$ x}' m, O* l! g, {* S' |
int main()1 ]- k* f- [, w7 H6 ~
{9 n+ X3 d, v; U% n) o$ [
int m , s , t , num , i , j , start;
' [ s+ u5 Q- l //input0 i+ n9 ?4 D+ ]$ c! |! c
scanf("%d %d" , &n , &m); //n顶点数 m边数+ j. ?& z/ d" @% |, n4 p- \# ~2 C) L
memset(a , 0 , sizeof(a));
( S; \3 I9 R% Z0 K5 l for (i = 0; i < m; i ++)' A2 Q+ T6 W( Q; Y
{printf("innput s,t");
6 _3 y) _1 ]7 F" m. V( P scanf("%d %d" , &s , &t);
2 I+ X2 ?4 n. D2 X4 ~% L2 C n a[s][t] = 1; a[t][s] = 1;" a; U5 m6 T3 n0 j/ m+ T9 d
}
) t( t+ ]+ O; \; V1 N' e6 v { //判断是否存在欧拉回路4 L/ m; t! N: [4 d/ @ X
s = 0; start = 1;8 _$ D" s9 M& q; h: Q
for (i = 1; i <= n; i ++)( ^2 k, c9 z+ S* `
{num = 0;
k- `$ Q" I4 t- Gfor (j = 1; j <= n; j ++)
! R" E' W5 s8 K$ Z! I num += a[i][j];
2 e7 }' } w- R if (num % 2 == 1)
N- N) m5 ~6 y1 k+ d{start = i; s ++;}
0 q6 d6 H0 F( P3 X' V/ E}& T; e* X, |/ q
if ((s == 0) || (s == 2)) # Q+ k, l5 n1 h
Euler(start);
6 C* I5 j$ R1 Y% s3 i2 h else printf("No Euler path\n");
+ g: f0 y% P3 }1 Y* _+ `getchar(); getchar();
" W( _% G% m/ q9 ^return 0; } |
|