- 在线时间
- 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>
( v8 E. W9 _. x- S8 n; P- p5 ]: V#include <string.h>, r3 t" }9 A* C2 c9 ^
struct stack
# ?- ?1 m& e6 d% i! P{int top , node[210];} f; //顶点的堆栈- s: C3 N7 ^, ^
int a[201][201]; //图的邻接矩阵! @( v/ { D9 Z6 V) t: N1 I
int n;8 l& c4 q! Y7 r6 `( {
void dfs(int x) //图的深度优先遍历
. P! I# P- m7 K& l{int i; F8 _, W$ `% B5 R& k' s n
f.top ++; f.node[f.top] = x;: A4 ]/ f- e3 f6 w: l$ k
for (i = 1; i <= n; i ++)
9 {( o4 a" p# T, m4 s0 e3 bif (a[i][x] > 0)$ C5 T j6 Q. q! f5 L1 v; M) ?( R
{ a[i][x] = 0; a[x][i] = 0; //删除此边
* r! U8 ?$ i$ L' D$ h/ H+ K) Odfs(i);
; t9 C0 o) E: \" @" v8 qbreak; }
. \& p' U2 R& \}
; `. T4 h* @1 N- E/ f9 A& h/ U" n+ lvoid Euler(int x) //欧拉路算法2 f! u7 {+ z$ L- t% N$ I
{int i , b;+ _! ]6 N/ Z8 T% N* r
f.top = 0; f.node[f.top] = x; //入栈) C" T: a- |2 V& b% o$ h
while (f.top >= 0)
; g" |# E+ K) A{b = 0;
: @2 W$ c- I/ a6 P. W$ m$ _. V for (i = 1; i <= n; i ++) . Q4 M6 P/ q. ]/ U
if (a[f.node[f.top]][i] > 0) # [! z. u4 r+ s. q/ Q9 R) v
{b = 1; break;}
6 u/ s0 Z/ H3 O* K if (b == 0) //如果没有点可以扩展,输出并出栈) E$ r1 V4 ~9 v3 J+ A9 ~9 \, K( o
{ printf("%d " , f.node[f.top]);0 t7 ]% u0 P* j) W
f.top --;}
6 H# N3 k9 ?) }8 y6 d C; |else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS2 i: f8 L: [4 J
}
1 B& H! D# J2 T! P7 b4 G}
+ {+ A- p( P% P+ L. s- L9 wint main()4 S) {% h0 j. \. G% e9 q. F* e
{ n9 b3 f ]4 j5 @6 \9 b Y
int m , s , t , num , i , j , start;9 P$ J5 I& ]& N+ y3 c7 R
//input
2 e4 Z! M* D- Mscanf("%d %d" , &n , &m); //n顶点数 m边数
2 |% A9 s, a1 ~2 n' K+ H H8 e! fmemset(a , 0 , sizeof(a));
, x0 h- U8 H4 S m p( T. { for (i = 0; i < m; i ++)
0 e& ]! w, S6 F$ ]{printf("innput s,t");
6 j* ?3 @. k \9 ?1 ^6 m7 l/ v8 | scanf("%d %d" , &s , &t);4 u* d2 ~' s9 l
a[s][t] = 1; a[t][s] = 1;6 N8 H" J- o- ?) _
}
% Y- J5 z7 Z' Y( I0 r //判断是否存在欧拉回路; N7 Q! A1 k( {1 _
s = 0; start = 1;6 L$ E2 m8 c& C* z& @
for (i = 1; i <= n; i ++)
. V: [3 W' W- y8 Z, M$ }5 ~& Q( g{num = 0;. P4 J/ I$ E3 P8 J
for (j = 1; j <= n; j ++)
- I: }& t* c9 {) Q. ^ num += a[i][j];
: c/ n5 E9 T3 }; M7 \# R) B/ X5 E if (num % 2 == 1)
2 K; I3 P b2 W* x# e# w, e{start = i; s ++;}# h" W; r8 Q! l/ @2 J3 ]+ ^
}
. S5 I, }4 w( h9 oif ((s == 0) || (s == 2)) - w0 m8 [ b' c: O; ?/ K; ]3 B4 Z
Euler(start);
8 {' v& p" T0 T( H' Q; \ else printf("No Euler path\n");) N1 ]; d7 Z) h9 y- k* I# N
getchar(); getchar();6 l. F! p% Q+ I0 ^' f; G
return 0; } |
|