- 在线时间
- 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># r) s ?- _: l3 Y/ q. C- U3 c- I
#include <string.h>
" T" B B* K# W5 A- q% S/ tstruct stack
5 L2 @* `2 W( n: a" z{int top , node[210];} f; //顶点的堆栈
8 Z( r% w; i5 c2 z& ?1 ], bint a[201][201]; //图的邻接矩阵
8 A& e2 }5 T8 n4 v( {) ^: `int n;# C" P6 I! Q& k8 B9 Z# P
void dfs(int x) //图的深度优先遍历" j3 K. g P* o: @" `
{int i;
0 P. o; ]+ w8 r" e) Q; ~f.top ++; f.node[f.top] = x;
3 r# S, W$ V, k* e( l" afor (i = 1; i <= n; i ++)6 R" J* @# j+ c) N. }
if (a[i][x] > 0)
$ M$ q+ p; A0 T* [7 D' f { a[i][x] = 0; a[x][i] = 0; //删除此边, e& p, e& N0 p; c
dfs(i);
$ Q& e& u9 d2 ~break; }
2 ^- N& m. P' ^& y3 U}
5 J' i- J$ v6 x1 Xvoid Euler(int x) //欧拉路算法
/ h2 L: m0 z/ _: t; I4 h( w) i/ W{int i , b;0 N: ?2 X4 N, P, B/ |
f.top = 0; f.node[f.top] = x; //入栈
7 {7 M4 I0 b# r( ewhile (f.top >= 0)9 F# J* ?) z' X# M0 @+ l# w
{b = 0;
* |8 B1 n+ ^% r5 Z L+ m for (i = 1; i <= n; i ++) 2 K K; h* w; l& ^3 [* S( z- r
if (a[f.node[f.top]][i] > 0)
, L) P' ~1 T" I* {' d3 y{b = 1; break;}+ ]; ^7 b# }: H# u
if (b == 0) //如果没有点可以扩展,输出并出栈
% M) I w* x2 i9 M" f! J) f{ printf("%d " , f.node[f.top]);
P' I- [1 p5 L2 V# } f.top --;}: ]& {' c# ]$ h+ O
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS6 Z# s: Q, `2 a% c9 b3 F j0 _ l
}
* q! o, x" B' `}
' t3 W( C8 _7 ?/ tint main()& x' @6 h4 H/ t/ I6 H
{' |, T: ^" e) O* H( `
int m , s , t , num , i , j , start;% x/ w* ?; g0 m% ^" c& y
//input; f: j% z, J6 Q( p" [
scanf("%d %d" , &n , &m); //n顶点数 m边数
( j/ ^4 n& X- \$ bmemset(a , 0 , sizeof(a));7 I3 a u6 Z/ b' D# a$ R- F/ B
for (i = 0; i < m; i ++)& q2 n6 s- D, c: Y' l9 l7 \+ T; b
{printf("innput s,t");8 W; O! E. }% y+ [& _) I
scanf("%d %d" , &s , &t);$ q, _2 D7 }1 i1 ]! R6 ~0 k+ @
a[s][t] = 1; a[t][s] = 1;" x$ \% I9 ]7 q, [
}
# U( g9 E; z3 T8 p# W u( l' k //判断是否存在欧拉回路
4 \: z" }6 c# l6 I; V- y. ls = 0; start = 1;
( y) K( U4 @$ r1 C for (i = 1; i <= n; i ++)9 Y6 e/ }. L# [: X( L
{num = 0;
: g. H& s+ e* z& h$ X* @for (j = 1; j <= n; j ++)+ z$ _* T- H% j4 N: g
num += a[i][j];
- r7 ], }( `$ y2 q2 O: s4 F if (num % 2 == 1) 4 `8 N& Y" s+ y- ~; p
{start = i; s ++;}- j; S. a, g3 ^$ E/ p
}, J9 M2 S# w, r# L$ }+ f5 B
if ((s == 0) || (s == 2))
9 P. \" y$ f! P1 ?Euler(start);; q" U! U0 s4 Q: C* z( N; G
else printf("No Euler path\n");
. N! s/ D; T K0 ?1 g; p1 wgetchar(); getchar();
& O' q D5 i# T7 \return 0; } |
|