- 在线时间
- 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>
* n8 a! P! G* H2 _' {$ v1 z# g#include <string.h>1 J# Q R, l$ ?/ f% |
struct stack4 `( e, X; O: Y) z/ O2 x
{int top , node[210];} f; //顶点的堆栈
2 _7 w/ S' b" ~ L0 n1 o# Q/ xint a[201][201]; //图的邻接矩阵
6 \2 Y' ^7 a9 uint n;) }+ I, P/ i5 `$ ^1 d4 K
void dfs(int x) //图的深度优先遍历6 u; x8 q( P$ e* i
{int i;8 n# O# W/ L+ B
f.top ++; f.node[f.top] = x;
( k/ ~; R6 d" b; C# I1 ~for (i = 1; i <= n; i ++)" y5 p& J1 x* U
if (a[i][x] > 0)
1 \ C% l: n0 b; l: z& r3 O8 R) L* A { a[i][x] = 0; a[x][i] = 0; //删除此边* v' b! P& J& F# W
dfs(i);( K* ~, ]; g8 @% c1 s
break; }& w) u, C8 O. D3 C8 S% O
} i3 {/ [0 \0 s- W8 ^7 f& s$ b
void Euler(int x) //欧拉路算法% M7 k5 w/ T2 ?% l" K8 Y3 P9 D
{int i , b;! ]. `0 c% ?- q* r# |1 {- O
f.top = 0; f.node[f.top] = x; //入栈* X( n- m+ X: |5 `3 p4 j5 Z! d
while (f.top >= 0)3 a3 Q- E: q1 G& u8 A' g
{b = 0;7 F- G$ l: G4 }" K. S% S$ V
for (i = 1; i <= n; i ++)
G n) h/ }9 h1 f' `if (a[f.node[f.top]][i] > 0) : d# I; {" P: y
{b = 1; break;}$ E( X% i2 t( d4 G$ E, j
if (b == 0) //如果没有点可以扩展,输出并出栈. a$ v" D% \, |5 z' M
{ printf("%d " , f.node[f.top]);- t+ H0 k* M1 I8 y! d$ N
f.top --;}
# s8 U6 p7 O( Uelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
, C8 e2 y: D5 g1 l% k7 |: p}
! S" V/ O! K3 h# [# U}% @. L6 X/ |( q: s6 E
int main()* m: E8 m5 c, W) [9 m' }/ i$ B
{( ?( z! D4 D7 S d! O
int m , s , t , num , i , j , start;+ B0 u3 Y! ?8 H/ x
//input
' x e2 z5 M/ i; G* ?scanf("%d %d" , &n , &m); //n顶点数 m边数$ x9 n! M K7 d1 d5 h n' g
memset(a , 0 , sizeof(a));: o' C: _2 Q; n
for (i = 0; i < m; i ++)
* w+ Z0 V# {, Z1 _% a3 ~8 z3 Q{printf("innput s,t");
, d O4 f# v' Q- Y scanf("%d %d" , &s , &t);7 w9 M4 _1 o9 x7 C v) A1 x# F0 q
a[s][t] = 1; a[t][s] = 1;! D F$ @) o2 |( R4 }: q Y
}5 d" F- b6 P: k, O! W3 e% @
//判断是否存在欧拉回路
7 O! F1 A: y9 C9 {s = 0; start = 1;/ | c$ ` ^/ d: \$ {
for (i = 1; i <= n; i ++)
, t3 ]7 z5 f( W( W7 O{num = 0;
1 L' q9 A# A: ?. A0 f) Wfor (j = 1; j <= n; j ++)
; u; }7 g& O: t2 N# q( n num += a[i][j];) S4 r$ I: n% r+ K6 R a
if (num % 2 == 1)
7 Y: A" L9 @: U9 g/ t% I9 t; m{start = i; s ++;}% r; q1 G' w' ?' l
}% A0 f6 h: @) }' @. h
if ((s == 0) || (s == 2)) : W2 ]; g ?+ `+ ^# G
Euler(start);0 B% m s* ~1 d" s/ [
else printf("No Euler path\n");
" ^5 R5 b( t. U. ]" b7 k( ugetchar(); getchar();
4 h, P$ t; v- G! V4 H( Zreturn 0; } |
|