- 在线时间
- 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>
6 R. e7 j4 k+ M2 ] Y% D#include <string.h>8 T- [9 X) J2 ?9 O
struct stack" |( E" T4 v4 ^2 x
{int top , node[210];} f; //顶点的堆栈
/ D/ B3 B2 U1 U k( o: E: w$ h9 Tint a[201][201]; //图的邻接矩阵
0 q7 V1 J' R% Y) f: j: rint n;
7 u$ d: D- f5 Y! I3 D# q& p6 L0 ~void dfs(int x) //图的深度优先遍历' [9 }2 q% K! Q! w8 n
{int i;
# m. N" ]( y: L+ w# X5 r8 B" n$ [7 s. G2 Cf.top ++; f.node[f.top] = x;
E- A* ^4 m/ f! _for (i = 1; i <= n; i ++)+ n* A- e: [$ f! _' O2 ]3 ], ]
if (a[i][x] > 0)
+ y' i) H: C% m2 Q4 a { a[i][x] = 0; a[x][i] = 0; //删除此边
0 T% P5 ~, o& r( {. Pdfs(i);
5 T2 |; W# ~9 c- _' |- U- \6 g* cbreak; }) U- p) M7 q& Q- t
}* ]5 }# J& h+ Z9 i( \3 o6 q
void Euler(int x) //欧拉路算法
: R" f+ C3 n! k ~ _- E( G5 ]{int i , b;/ ]# o f9 D! F6 h1 o
f.top = 0; f.node[f.top] = x; //入栈$ K* C" V# c% x# r9 s# v
while (f.top >= 0)
- r* s7 J* z( a: `0 [: ^' {{b = 0;
( x; s1 V! P3 X) ?: d for (i = 1; i <= n; i ++) ( Q) d) @% s% p# V9 X" D' _
if (a[f.node[f.top]][i] > 0)
8 W0 d9 O( h. ~5 a7 Q9 J7 a3 }{b = 1; break;}) y1 M/ {& _4 W& l. p
if (b == 0) //如果没有点可以扩展,输出并出栈
9 A, q$ Q; v" V{ printf("%d " , f.node[f.top]);
; \$ U" V8 L N; p4 g R f.top --;}5 ^# }7 d; i# I9 @5 [. d4 c
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
3 G) U& U# t6 A& z( F9 M$ I: w}
+ u+ Q+ _$ C$ V2 f8 ^; M3 `9 W}# \: y# H8 R7 o* G% x V
int main()3 I2 u4 ]& F. i
{
; @# Y1 @( G/ ^. n" r& ]int m , s , t , num , i , j , start;8 N& p$ O8 C& [9 W6 K7 a
//input) C5 ^* D) p- B1 N. Y9 e
scanf("%d %d" , &n , &m); //n顶点数 m边数
: Y7 l, C6 g5 `* pmemset(a , 0 , sizeof(a));2 `8 Z/ z7 I2 o- R! p3 @
for (i = 0; i < m; i ++)
$ H+ J: s3 M) Z+ F3 b{printf("innput s,t");4 T% R5 Q2 m g
scanf("%d %d" , &s , &t);% f6 w' s, X6 F+ }
a[s][t] = 1; a[t][s] = 1; J0 \9 g5 ?& V& e- x
}
2 Y, m7 q& i$ A) Y3 }. p //判断是否存在欧拉回路* y6 F4 ], P" ~: C
s = 0; start = 1;
& j) j6 Q/ F8 {5 G! f) ]/ G for (i = 1; i <= n; i ++)
: q6 E$ s% [; `7 W" d3 X) Y{num = 0;
9 S6 P' T, p7 o7 ]" v: {) j& Afor (j = 1; j <= n; j ++)
/ U3 Q( }& m: j) A num += a[i][j];
$ z9 D) J! M- g& f. \% R if (num % 2 == 1) + ]7 K9 b; I- N+ \- S$ k6 ?
{start = i; s ++;}" W1 M9 M; J6 E8 O
}
* r9 Y/ A$ k ?8 i1 N8 S. p, [' R1 j. Nif ((s == 0) || (s == 2)) / l! Z$ }9 q7 o- ~3 d
Euler(start);
# @5 k1 H* i0 w3 G9 `$ X else printf("No Euler path\n"); h$ I1 Q& I! s
getchar(); getchar();$ V4 w' d, S1 c1 V) K
return 0; } |
|