- 在线时间
- 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 t$ [: M: i. q/ p0 Y3 k( L#include <string.h>: I, s4 ~3 l0 ]: v
struct stack; d; {6 h j7 b* ~- Y: d
{int top , node[210];} f; //顶点的堆栈
4 q% P- b& N" X# V! Zint a[201][201]; //图的邻接矩阵+ l$ ~) h; ~! X; V' A8 I
int n;
2 d, G. O' G2 [void dfs(int x) //图的深度优先遍历2 c3 V5 g5 z z& p
{int i;/ B0 B7 Y+ A: u! R' x" \
f.top ++; f.node[f.top] = x;
, X+ q! }9 t9 F" g6 t8 U, |for (i = 1; i <= n; i ++)
* V9 J7 F0 p+ M3 W# Hif (a[i][x] > 0)
) L3 {. R$ r* N, ^4 w* ?' b { a[i][x] = 0; a[x][i] = 0; //删除此边# f* F% V% ]1 D* Z# p; N. T
dfs(i);% \9 c0 p' r/ b+ ~7 u1 Z
break; }
6 {1 j- m1 \5 b; v" N}9 X! K5 N. x" G1 ~: s
void Euler(int x) //欧拉路算法
4 e8 R3 i+ l2 n d5 ~; a7 q: g6 K{int i , b;
- A! e' v& L& }4 |/ h8 J( o, _( D; vf.top = 0; f.node[f.top] = x; //入栈
' T5 p- ~: p9 M% j" _" ?while (f.top >= 0)4 ^/ y! [; |6 v1 a
{b = 0;
! k& B6 P' N) `$ e* h3 E! g, X for (i = 1; i <= n; i ++) % y# S8 e. v2 M2 o4 K& \
if (a[f.node[f.top]][i] > 0)
: a) k! M. N6 B% B! \{b = 1; break;}
0 _% o1 R% |4 N. r$ C$ q @, T if (b == 0) //如果没有点可以扩展,输出并出栈
6 @* ~* i8 _! i6 U% i, b{ printf("%d " , f.node[f.top]);* D( H: t9 T3 o7 U
f.top --;}
" T0 W# v v! ?3 relse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS7 J6 @: D) T; l) |$ G+ ~2 X- s
}3 O: ?! l4 m. D4 m) x$ d m
}6 I* J1 G2 r- l% G* |) o% I4 g
int main()
y! _2 S5 A5 o1 h3 S{
$ s# E3 v( ?$ M' |4 Pint m , s , t , num , i , j , start;0 s2 [+ L+ l$ x4 z# ?
//input. ~9 L( c; v. d/ Y o# \
scanf("%d %d" , &n , &m); //n顶点数 m边数
1 a4 ]- k+ |- zmemset(a , 0 , sizeof(a));+ ^' b3 N- n* I" z0 P; g
for (i = 0; i < m; i ++)" k. P/ ]0 P# N( n& G, o" d
{printf("innput s,t");* L( i; s: c; y0 U! g
scanf("%d %d" , &s , &t);
# k F' O9 P$ ~ a[s][t] = 1; a[t][s] = 1;2 ?; h o% ]0 o. K8 P3 B4 q d5 U
}
, K% _) ~3 \. z, X6 a( J' ` //判断是否存在欧拉回路. [8 `+ o9 \1 w" w' I5 o
s = 0; start = 1;# D, M6 X A4 X2 d2 L* x( s
for (i = 1; i <= n; i ++)6 @, d+ K: d" k! f
{num = 0;
' I0 }. z8 L/ A4 y: ]% B& K6 E: Ifor (j = 1; j <= n; j ++)
- i& \6 B* ^9 ?: z& N4 {$ d. p num += a[i][j];! x9 @1 G# z8 n
if (num % 2 == 1) ( [$ J; _9 K/ U2 k! n. k
{start = i; s ++;}, l5 t+ F2 k4 d/ G6 F
}
( Z7 ^9 Z# ?, x0 aif ((s == 0) || (s == 2)) ! [$ F. i; B$ P% y
Euler(start);
9 {% n$ Z* f+ }* I8 U) M% s else printf("No Euler path\n");9 X/ w* q( ~# c% L9 u; @
getchar(); getchar();
# b+ y% x" z3 M' l _; Xreturn 0; } |
|