- 在线时间
- 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>
3 Z8 C3 p% w5 o#include <string.h>8 P- J1 G$ M; o" U: F9 U1 X; k' `
struct stack; P; J0 y9 K' } E
{int top , node[210];} f; //顶点的堆栈
; k: u( l9 E0 h% j4 y, w) hint a[201][201]; //图的邻接矩阵
0 b X- P1 J8 M8 z" O# i" Oint n;
; i4 _1 \& w8 t; ]* S1 N1 ~void dfs(int x) //图的深度优先遍历
- Z2 ?+ y3 }5 D& c3 B{int i;
' Q2 r( u7 ]7 i9 J3 Tf.top ++; f.node[f.top] = x;
s- u( o" x5 c3 Z( cfor (i = 1; i <= n; i ++)
: O* w0 H: K8 ?if (a[i][x] > 0)
) }0 k, b* \1 ^" Y) _4 c- k, H { a[i][x] = 0; a[x][i] = 0; //删除此边0 J$ g6 G1 J' c: b& i" [8 Y8 Y
dfs(i);, V* B3 m$ T/ X1 Z7 O: ^+ V& |
break; }, u/ }* V% y0 e
}1 j% m- r: M- s; t5 Z! t
void Euler(int x) //欧拉路算法
4 \4 {) J: {: z+ V6 F. Q0 V1 y" ~! g{int i , b;
N' ~7 f7 q# Af.top = 0; f.node[f.top] = x; //入栈
\2 v! t$ B5 z2 l+ S& ^5 {5 K" ewhile (f.top >= 0)
, T! l* E! m. S1 {% {/ Q{b = 0;
* J+ K& w. X2 P3 ? for (i = 1; i <= n; i ++)
& f2 T" ]6 c& o2 O$ h* N, bif (a[f.node[f.top]][i] > 0) ( v! k' t6 o! h! G
{b = 1; break;}( [- r+ }" ?. j% y h% H
if (b == 0) //如果没有点可以扩展,输出并出栈- j: F, L2 ?& i# W% G
{ printf("%d " , f.node[f.top]);! S: }( `8 L/ U' u# M
f.top --;}
z8 F) w% d( Zelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
3 p* s- k" \% u. n}( U* R4 N* s" H1 s2 p* R
}
3 v/ _. _% B I. w: c: Pint main()5 s. r' ]1 ^( m, h- h4 z
{& }+ l6 H( y. {- a
int m , s , t , num , i , j , start;
# [2 |% [0 t* E% h' x //input6 c: v' d& b2 x
scanf("%d %d" , &n , &m); //n顶点数 m边数
! r1 s) o( ~7 U$ Tmemset(a , 0 , sizeof(a));
6 r* @7 [, R1 b; l. i2 K for (i = 0; i < m; i ++)
9 s1 S# t; l, {! L1 U{printf("innput s,t");2 `8 l$ d5 _, J. c; R. I- l( r* X1 s N
scanf("%d %d" , &s , &t);
1 h1 W! Q- V8 l, G( G3 s0 N a[s][t] = 1; a[t][s] = 1;2 v& \( t3 D" K1 f) u( Q6 U
}, q" F2 |4 |, X9 X
//判断是否存在欧拉回路
6 s c$ T; B0 us = 0; start = 1;! e" }$ |! @: j! n
for (i = 1; i <= n; i ++)
4 z: x [' p+ D0 z/ X' ?2 d0 G) L9 _, m{num = 0;
8 Y) L1 @3 I8 E6 yfor (j = 1; j <= n; j ++); \0 M) a/ |" }6 Q: P9 p( V4 F
num += a[i][j];
# c7 L5 ?( [9 O if (num % 2 == 1)
" a9 J, A/ U/ |$ C# `! d{start = i; s ++;}
: A- B7 t; [7 e}+ a: X1 Z; o- J1 \" h
if ((s == 0) || (s == 2)) * V$ R# c) \0 V$ h, M
Euler(start);* H" V* s1 R! d2 d8 M' E
else printf("No Euler path\n");' I0 \! y* j$ w- y6 [1 |. W
getchar(); getchar();
7 o" _# M" a, F" A; d+ T+ breturn 0; } |
|