- 在线时间
- 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>, f8 u2 h3 _6 A, d8 Z% Z# R* Q+ @! u7 i
#include <string.h>3 |2 Q& O) Q j- ]! _* C
struct stack
$ m/ ?" T* d8 |5 L$ w6 H, j+ f{int top , node[210];} f; //顶点的堆栈
6 f! n2 w: A* [int a[201][201]; //图的邻接矩阵
3 g: u- ~& n+ ]4 `' Pint n;4 `2 t" C C8 e" [0 \' \
void dfs(int x) //图的深度优先遍历
! }- k4 M" T% Z; E i{int i;
2 s4 g, {. g+ l9 A8 p& i7 pf.top ++; f.node[f.top] = x;) _& y' n3 D# I: V4 n# J2 y+ Q
for (i = 1; i <= n; i ++): r% q- V L- g( r# g& a+ \
if (a[i][x] > 0)
* L1 V4 q+ z! e2 u, ? { a[i][x] = 0; a[x][i] = 0; //删除此边/ r) b' O3 k) M% N1 |1 |6 `5 h
dfs(i);" l' E i2 e+ ]$ b& o% k
break; }. }) g- S! G+ c8 C4 e3 K
}
" r$ l4 }+ b6 H5 p3 fvoid Euler(int x) //欧拉路算法% f0 Y$ L, S$ Z, X8 n; P' A) ^3 x
{int i , b;
* L. Z$ e4 m$ ]* M' [3 }f.top = 0; f.node[f.top] = x; //入栈
; I# w9 J. R0 H& F( j1 dwhile (f.top >= 0)9 q7 {* S) r, X' i
{b = 0;7 D6 @/ o% F7 C$ k/ M- s- ?
for (i = 1; i <= n; i ++) $ D/ r) [* I$ L. r
if (a[f.node[f.top]][i] > 0) 8 s; m; m0 c% ]8 i3 R* x
{b = 1; break;}
# V; p6 m, P0 x/ {$ p if (b == 0) //如果没有点可以扩展,输出并出栈
5 Z; J8 B* m' D% r- z) D, r3 b{ printf("%d " , f.node[f.top]);
# f: T# c, B7 D7 G# e; h. y' b f.top --;}( ] y; R3 J7 d* t
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS$ A& k8 o8 Y1 M3 [. C1 K4 U8 ?9 x
}
) j d( P7 x+ L8 x7 W' H* X}
3 J! f# L9 P6 N! Z; cint main()
5 i8 P: H* Y7 o{
: @1 r k* v; K+ ?int m , s , t , num , i , j , start;8 S- t) ~4 o; c5 B% f
//input& W7 x0 l: g5 X* J+ L/ T
scanf("%d %d" , &n , &m); //n顶点数 m边数$ E+ {4 @7 M8 Q$ T' O' w
memset(a , 0 , sizeof(a));
% D% p. L$ r2 N& }, Y, N for (i = 0; i < m; i ++), X6 K5 n/ ^$ y
{printf("innput s,t");, X) @- `+ S; w. J8 O
scanf("%d %d" , &s , &t);
6 }3 _! d1 V9 Y2 p+ r& b# ^! @) c a[s][t] = 1; a[t][s] = 1;
/ ^2 {: q7 Y8 S6 e/ B$ c* v% { K}
6 l( e' I8 y. V c" c1 u# m# j //判断是否存在欧拉回路: w7 i4 g9 E* k
s = 0; start = 1;
3 @1 ]3 @* D" k" ^6 u for (i = 1; i <= n; i ++)
+ b! u5 V) y0 C. k" r: B' Z{num = 0;
. {/ m9 X( B2 z% n; M/ X: [/ `1 ?for (j = 1; j <= n; j ++)% \1 C3 W/ N! q+ h/ B: ?1 s
num += a[i][j];
5 @1 _: S' L3 ]6 \* P' H( p if (num % 2 == 1)
* k Q4 I! _6 }" f# p{start = i; s ++;}
, j% l1 ]8 i4 P5 x}! D; d4 d5 }3 v: {8 m8 E4 K) W
if ((s == 0) || (s == 2)) 8 m# m) G, k- P" n8 o
Euler(start); {- M# L1 K. O. e* Y# Y' b
else printf("No Euler path\n");( Y- n; s" T& Q/ r! A# a
getchar(); getchar(); `( t0 W" r* k: Y! ~ T. y5 e
return 0; } |
|