- 在线时间
- 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>( \' {& D$ Y! ~( a4 G$ G- G j6 H
#include <string.h>6 S0 v6 W( l3 V2 {( {6 _9 y
struct stack# E" u2 n! ?" g" Z$ ]+ g5 Q
{int top , node[210];} f; //顶点的堆栈0 B$ ]5 X5 ?( |( `
int a[201][201]; //图的邻接矩阵 P) y& x8 `0 T" U
int n;
/ G5 a3 q8 ^ l3 L& e% V& Wvoid dfs(int x) //图的深度优先遍历
6 @6 `0 W, T# [8 G- a{int i;8 t; a5 l1 m) E5 G- [
f.top ++; f.node[f.top] = x;
. i) {+ w q% |2 tfor (i = 1; i <= n; i ++), S4 a1 F) V: c' q* @# G m. p
if (a[i][x] > 0)2 Z: O+ M# M) M5 e9 P
{ a[i][x] = 0; a[x][i] = 0; //删除此边$ N, G2 }( ]+ W, G$ y. f
dfs(i);7 d6 u) i9 A) Q w; y+ n
break; } r6 K; H- p1 v! p( t5 V* Y$ J0 e) d
}7 q0 l& a6 U r4 \# h( y7 k
void Euler(int x) //欧拉路算法 v, b, G9 u. A% S- \. S+ Y
{int i , b;
0 l9 t5 i D3 Q+ \# L& C" Y9 c4 Tf.top = 0; f.node[f.top] = x; //入栈) U/ Q8 A' C, | p6 W- K
while (f.top >= 0)2 w+ k0 h- S5 Y
{b = 0;
4 u, S& i5 O! V9 P/ S for (i = 1; i <= n; i ++)
2 C* c; f6 ?; q; t- Uif (a[f.node[f.top]][i] > 0) ; S- M: |3 e! m6 _; q
{b = 1; break;}
0 h& ^* G% V6 M7 e$ O. v R2 e5 Y if (b == 0) //如果没有点可以扩展,输出并出栈
$ v, l% z0 X( J+ q* Z7 `{ printf("%d " , f.node[f.top]);' l8 J8 g4 N5 h& m" n
f.top --;}
5 \) D' f/ }- t- x' X( E/ [: P0 Relse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
6 S$ |6 M8 R% Y$ _}0 M, p$ w1 |" C, X% w" z( y
}
O+ K6 }$ U5 Q6 zint main()5 }' e1 V3 B/ w7 @9 y
{
* S0 X0 h. J& ?5 `4 a; j. x( a. Oint m , s , t , num , i , j , start;1 h( Q0 b4 Y6 T
//input: n; N+ x0 {% N2 O
scanf("%d %d" , &n , &m); //n顶点数 m边数% d7 t. ]' a$ |/ i7 N; {# R! d
memset(a , 0 , sizeof(a));& Z4 m t. w- N- c: H% Q
for (i = 0; i < m; i ++)1 J* _6 Y* o. b
{printf("innput s,t");/ @% D% B: ~* T0 ~3 T* Q
scanf("%d %d" , &s , &t);6 @; ~$ G% b/ H! m8 }# @
a[s][t] = 1; a[t][s] = 1;/ z- C9 r/ d" ]& J
}7 W' V4 Y1 d, B; |# s$ U
//判断是否存在欧拉回路5 {: `& |; C9 @( f) M
s = 0; start = 1;* N: m0 i# A; o+ f; P7 o1 G
for (i = 1; i <= n; i ++)2 @3 z% ] J$ q" x: }9 a- y
{num = 0;
2 i- b" S' S8 q+ h! G/ Sfor (j = 1; j <= n; j ++)( M, [4 n" y0 A/ G) h. a- }" l
num += a[i][j];
& o( E2 {/ C' J if (num % 2 == 1)
1 a. ~! W3 _5 x. V1 e{start = i; s ++;}
5 t4 N/ X' A2 B+ ^# c q4 J}
2 a$ r$ `3 ?6 g9 g- }4 x( A" |if ((s == 0) || (s == 2))
" F8 _% P5 o$ u; \& `) \Euler(start);
) @& v, Y3 k) f; X4 r else printf("No Euler path\n");; y* I0 E' [5 M8 t, n. w3 Z W
getchar(); getchar();. q1 }& V$ [$ m
return 0; } |
|