- 在线时间
- 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, }5 t7 T: |+ |3 N#include <string.h>- k( W- H$ e# ?4 z: m7 ~
struct stack
1 n9 j# N- F' q: y: \{int top , node[210];} f; //顶点的堆栈
. |0 R5 ]$ W& Z% Q% V9 |int a[201][201]; //图的邻接矩阵( F7 O* z3 c, Y/ b( r! _
int n;
! c7 ]) }& ^8 f3 R- M8 kvoid dfs(int x) //图的深度优先遍历; D. b' L( e( j$ S* k, t
{int i;! P, W* D: w$ ^. o K( H
f.top ++; f.node[f.top] = x;. U6 g% V0 X5 z" T2 ?
for (i = 1; i <= n; i ++)
1 ?6 Q+ I0 G3 b: d ]if (a[i][x] > 0) b Z( O0 \. N; Q9 X& ~
{ a[i][x] = 0; a[x][i] = 0; //删除此边
( F7 @( a ?. `' g5 adfs(i); S+ ?* B; {: ]2 ]6 y
break; }3 g# C1 ]! O! h
}
6 K" m q6 X; s' e$ f% d, ovoid Euler(int x) //欧拉路算法 a# _2 w2 v( f; z8 H
{int i , b;
4 n7 U2 Q3 `' E& e5 ^4 _ ff.top = 0; f.node[f.top] = x; //入栈
' X0 R) ^; K2 R6 i! d swhile (f.top >= 0)
# s d1 q* k& a{b = 0;9 u& V8 j& U0 o, u/ H/ [5 q; |
for (i = 1; i <= n; i ++) 0 M3 A, D1 {- ?$ y& V4 B
if (a[f.node[f.top]][i] > 0) * |+ v- B; Z( s0 J$ T
{b = 1; break;}
" W( h* v8 p' g if (b == 0) //如果没有点可以扩展,输出并出栈' i" x; O/ @3 L0 G7 @* N; s0 D5 x
{ printf("%d " , f.node[f.top]);
; D' [8 O( i, K& c3 A' W0 e f.top --;}
* \" A7 l9 g/ q* o6 x* p. Lelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS r# e) w2 \" ?! D1 m1 m
}. V. r1 _; T# q1 M6 O3 G
}. M2 W, n' W/ B" `2 V6 _ ^1 v
int main()
1 S3 r, Q# n7 K{$ i5 K. q: T. F" ]) V2 ^
int m , s , t , num , i , j , start;1 R+ t0 M8 d7 I, p( K9 L7 ?5 E( e
//input- J: ~4 F* T$ j7 a
scanf("%d %d" , &n , &m); //n顶点数 m边数
% P5 H9 Q9 |8 n/ E- a- J1 [( gmemset(a , 0 , sizeof(a));
M$ l: @1 Z' J5 \" U- [: g for (i = 0; i < m; i ++)0 }( C4 m/ d9 p' X: T- F" @2 `
{printf("innput s,t");0 M2 k# t6 ]6 X3 v
scanf("%d %d" , &s , &t);
2 k, y3 c+ d" X/ \ a[s][t] = 1; a[t][s] = 1;
( Y2 u# t5 {+ n* l$ O( m5 [% d}. y. }8 B. k0 x
//判断是否存在欧拉回路
" T4 j1 j. u" G7 Xs = 0; start = 1;/ K5 n" Y# T6 h0 _5 l( q8 H5 V
for (i = 1; i <= n; i ++)
- m# Z7 P# W5 S/ U{num = 0;
# J/ H- E0 X9 g0 x9 i- `) F' Efor (j = 1; j <= n; j ++)9 C3 d4 h; T% }: u' F: c8 Z7 ]
num += a[i][j];
6 D6 t" y9 a5 h/ V0 H* { N if (num % 2 == 1)
. c9 p; D! P- [" x; m{start = i; s ++;}7 y7 a* ^" u! V* h
}
$ c2 J4 p/ F) Z! Zif ((s == 0) || (s == 2))
3 Z' ]! X t0 Q" u# c3 T! t& @2 @Euler(start);% a" q2 s+ ~ d" ]6 h
else printf("No Euler path\n");# d* @! o Y3 i+ T8 F
getchar(); getchar();
/ x+ ~! `9 C# g+ S1 S2 U) Oreturn 0; } |
|