- 在线时间
- 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>6 n7 W/ V% ^, R! T" \( T
#include <string.h># [" V) @' a; E( M# C& W3 X
struct stack3 F+ u, a- V# J' X$ u# k$ d9 t
{int top , node[210];} f; //顶点的堆栈
! e/ l8 c$ a% E. t$ c4 pint a[201][201]; //图的邻接矩阵
0 g1 ~/ d3 d. o# Wint n;9 U- b% p! s. U( M' G, S
void dfs(int x) //图的深度优先遍历% H# D; G8 B* ?
{int i;* A' f9 ^) q( h2 B, Y: Q
f.top ++; f.node[f.top] = x;
& n$ v% E Q2 Y8 \ X0 e. Afor (i = 1; i <= n; i ++)- |# S" U0 h% Y* R3 k
if (a[i][x] > 0)9 _) ?- Y& F4 ~ X" i
{ a[i][x] = 0; a[x][i] = 0; //删除此边
/ |" H, x" h) k; O& rdfs(i);( l( g4 P3 v' u( G- ~: U( i1 \
break; }
; q% x" |; F4 r7 y8 b- _}
7 K' n) P3 H0 B, mvoid Euler(int x) //欧拉路算法; {" h$ ?# a. N z
{int i , b;
% X, ?' V7 d0 v$ k% vf.top = 0; f.node[f.top] = x; //入栈
; B/ N- h" K! ~1 n7 d Ewhile (f.top >= 0)
, ^ q$ E! M' ?& Z{b = 0;
/ ~- T5 b: y4 j7 H for (i = 1; i <= n; i ++)
( U/ d# u- q% g e! R# d+ Xif (a[f.node[f.top]][i] > 0)
6 l6 [7 z1 h, |0 p& X0 f J4 Q{b = 1; break;}; Y" N- x" L1 }( I
if (b == 0) //如果没有点可以扩展,输出并出栈( o/ N; q# g8 K7 d
{ printf("%d " , f.node[f.top]);5 H' |1 l4 g) `/ q T- w
f.top --;}
- ^ d( J% b4 L& r P/ Belse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
+ M; `& L& l- O! H5 ~# H2 y, \}
2 c8 e8 q, m W+ L}" p( l5 |- _. |9 |( l, d% i6 @/ K; h
int main()% p1 J9 p3 Y5 I% |* j' [; j* S* ^7 _
{
. V) J7 }7 l: y+ K& @. A. l2 qint m , s , t , num , i , j , start;
1 o9 ?8 h1 g' n" T! I7 d //input
( i8 ^( x, `: G4 y2 K* }scanf("%d %d" , &n , &m); //n顶点数 m边数# h% S7 E5 M- d) p+ [3 Q2 T9 c' h
memset(a , 0 , sizeof(a));
; ]/ I! k; w+ r' f for (i = 0; i < m; i ++)
) F3 U( Z( ?' q{printf("innput s,t");' t: e0 p4 e) \6 V7 a4 ?/ |0 x9 s3 M
scanf("%d %d" , &s , &t);: ^, N: \, O, H( Q" a, r+ D
a[s][t] = 1; a[t][s] = 1;
/ j5 X' n+ `6 H. G0 s: H t* k}( F+ V% g7 p8 D- u# O
//判断是否存在欧拉回路
4 T# @+ q0 A9 D, P. F: C$ Ws = 0; start = 1;
. U3 `1 p* H& k8 ] for (i = 1; i <= n; i ++); n O. B% P, v% _
{num = 0;
# h, x1 V ]$ x& g" \2 [; ifor (j = 1; j <= n; j ++)) L" f2 d4 w3 B' `" F8 y! Z
num += a[i][j];
4 t' j( M4 Q2 o9 n, W) S if (num % 2 == 1)
$ C* Y8 W3 h+ {; m5 n0 g{start = i; s ++;}
: k* t0 X' B. m' `0 ]9 x5 R}# q& u a, ]0 w
if ((s == 0) || (s == 2)) / S: e" u- T7 g0 L8 e* ] H& E
Euler(start);9 i( k2 k9 M8 ~7 B. J
else printf("No Euler path\n");
/ ]. c) e" A+ X0 wgetchar(); getchar();
8 G) K6 }' c1 H" qreturn 0; } |
|