- 在线时间
- 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>
9 G3 {2 C; l+ v#include <string.h>
, A, V# k2 U8 s/ E6 \struct stack1 s1 { U3 \, Y; z7 x; k1 k( i
{int top , node[210];} f; //顶点的堆栈
& s6 G) E/ `) v9 }( X4 rint a[201][201]; //图的邻接矩阵: |( G$ s7 e% ~, l% b. F$ e
int n;& Q* x0 ?# {; O9 ]# h- o
void dfs(int x) //图的深度优先遍历
8 c( p9 Z G% b. I! h{int i;# Q4 S0 G2 x" f
f.top ++; f.node[f.top] = x;
* ^+ t, X* Y* `for (i = 1; i <= n; i ++) i/ e( M+ ^3 Z: `
if (a[i][x] > 0)# t5 B0 W9 n2 ~4 x m
{ a[i][x] = 0; a[x][i] = 0; //删除此边6 u( k. V& E b# h/ G" W) S
dfs(i);+ }$ _: b' { J
break; }5 Z6 o+ }% S/ q
}
* e: D3 k' b# Z1 e. f# Z7 X3 p8 uvoid Euler(int x) //欧拉路算法
3 e) {* s2 u9 G{int i , b;
! r' q ]: ?1 U7 i7 Z4 Q7 Lf.top = 0; f.node[f.top] = x; //入栈
- X+ I5 k2 U2 `- W, Uwhile (f.top >= 0)
8 Q6 O5 q( }" n% { i3 b7 d1 v{b = 0;4 X9 P2 D1 j' N/ T
for (i = 1; i <= n; i ++) % k1 |/ u- M7 G9 u
if (a[f.node[f.top]][i] > 0)
* t9 V/ y1 u3 T) t{b = 1; break;}
Q: C. ]' \3 K7 T if (b == 0) //如果没有点可以扩展,输出并出栈9 Q: I3 ^" Q- E7 P, H6 Q1 D
{ printf("%d " , f.node[f.top]); ~3 B6 C$ v; T; R) e
f.top --;}$ B1 |+ O7 j' P: F& s' Q
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS& X' Y0 a! {0 c* `- t! o3 X
}
" t) T. z1 Q* T( R0 D" k4 |/ R8 c2 z}
4 ~# m; G1 q6 _6 U+ X+ Vint main()$ J6 x' q! q8 r L* O' v
{
& z3 c- o* ?* I* s3 \int m , s , t , num , i , j , start;% G. J( G" w9 ^; E0 `
//input
5 p e# R' h$ \/ Tscanf("%d %d" , &n , &m); //n顶点数 m边数& f) H$ e' b. `1 N; Q: R
memset(a , 0 , sizeof(a));+ O8 O: U% K6 I4 q1 i$ a5 _
for (i = 0; i < m; i ++)
+ \) L: m- z9 D" J{printf("innput s,t");
; ]* y: I# h1 `# q. s! l4 I scanf("%d %d" , &s , &t);
% _1 V3 U" _- ~* X, g& `3 a7 f a[s][t] = 1; a[t][s] = 1;
: E2 z C Q ^! ], _2 b}9 A1 B8 E5 O/ |" @
//判断是否存在欧拉回路
* a, R, n9 Q) y1 u, U$ ms = 0; start = 1;
; {" B" u) M1 ~. z* X0 R for (i = 1; i <= n; i ++)! Z# _3 L2 }6 l7 a+ X
{num = 0;( B: t" e% l7 d
for (j = 1; j <= n; j ++)
9 ~4 d- ^+ T4 s2 N- A2 N num += a[i][j];
# _* P: ?! | E5 ]. } @/ _% q if (num % 2 == 1) 1 f5 J* }' W" e& P$ v+ ~0 Q/ a
{start = i; s ++;}
3 m1 o" D" v% x4 c, R}
- A" b. Z' x# `' Gif ((s == 0) || (s == 2))
0 V% a. k1 C7 v& E0 A. {6 k3 n1 ? WEuler(start);1 |7 H9 V% q5 g5 s2 ~
else printf("No Euler path\n");& y+ H: ^8 ]% D W' M
getchar(); getchar();
' x& Q$ N. k G7 t+ E8 N- i* ^return 0; } |
|