- 在线时间
- 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>. g2 Y. f9 @) }
#include <string.h>
) Q* j' b4 i1 Z1 ?struct stack
$ M4 U8 C* ^ g( O* |{int top , node[210];} f; //顶点的堆栈# o ~0 n: o; I; n5 Z) |) v4 j' a
int a[201][201]; //图的邻接矩阵
% I: F0 z& a* {8 }int n;4 A7 J' [ P0 d1 [
void dfs(int x) //图的深度优先遍历
3 Y1 R& O% F8 V9 V& m{int i;$ w9 O& Y5 e1 p8 t2 L, j+ N
f.top ++; f.node[f.top] = x;
8 c& Y" T* a% F7 q- e6 K, _8 h. ffor (i = 1; i <= n; i ++)6 G: u. H L+ q, w" E1 V
if (a[i][x] > 0)
! \, L) J/ X7 _$ C0 |) t { a[i][x] = 0; a[x][i] = 0; //删除此边' r; Y' O' M- n) n/ J9 E
dfs(i);
1 i v# T! b+ ]; m0 n! p. m- |7 z; gbreak; }! c& @& i3 `! ^
}) M' D: \* M' o
void Euler(int x) //欧拉路算法3 L8 a9 z/ e+ f1 H8 F" k3 \
{int i , b;
' g( T& R9 ?3 jf.top = 0; f.node[f.top] = x; //入栈
, r- H8 N9 C7 w0 k* ywhile (f.top >= 0)8 r z" I% ~8 E; F6 [% }' x
{b = 0;
6 r- c3 H5 t3 b5 i) n) C for (i = 1; i <= n; i ++)
* G4 X4 m) g. l# D5 C, ^# }! @, i: Eif (a[f.node[f.top]][i] > 0)
$ b: A5 z4 O8 @5 p+ e) s( U" h{b = 1; break;}$ z4 I6 b6 o2 N/ ?/ W
if (b == 0) //如果没有点可以扩展,输出并出栈: [: X1 O% {. H% U- [9 }
{ printf("%d " , f.node[f.top]);7 k% c M( _: O& ?
f.top --;}& G J# f4 C# @8 k# F+ m
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
& F- F7 N% j6 j9 m' k( F( \}0 ?0 l6 f: @- [- U9 a4 C
}2 H5 L3 D# A& q% v
int main()( b2 P4 N% s0 \+ K$ D$ K
{
: T- C( I' z' q! xint m , s , t , num , i , j , start;
! c/ Q, B1 e, s! j- g9 c: s //input
- A4 m/ D) n$ P# `5 @scanf("%d %d" , &n , &m); //n顶点数 m边数+ b) {/ i) ?4 s! p
memset(a , 0 , sizeof(a));/ b3 S2 c4 d1 M& z! f
for (i = 0; i < m; i ++)
. Y( V6 ?+ V# G9 o+ e{printf("innput s,t");- o9 a1 O" c8 Q5 I C
scanf("%d %d" , &s , &t);
9 l6 @' M7 |2 s# X0 `* \ a[s][t] = 1; a[t][s] = 1;) y+ [- d% l0 |& ?3 P6 K' V9 C3 H
}
( Y/ h0 H* G6 q |! J* { //判断是否存在欧拉回路1 d8 G B, B6 [- P6 b# s4 P
s = 0; start = 1;
6 `6 J9 A" F+ s ]% ^2 F for (i = 1; i <= n; i ++)2 \2 ~# `# w0 H% W/ i r% N) D- @
{num = 0;
9 D T1 V/ @9 p1 W8 J" y1 Rfor (j = 1; j <= n; j ++); m3 j6 g0 C% ~7 M3 ]( G1 n6 T0 P$ g
num += a[i][j];
% e J0 H# Q4 h, |6 {& H if (num % 2 == 1)
2 n. q& S! o! c* w+ c3 c{start = i; s ++;}- L' `- g3 g1 j! W4 T4 q) X* W
}* s+ ?" k2 ]6 o, n4 Z# w# R
if ((s == 0) || (s == 2))
" U8 M$ m |" M j/ c8 L2 hEuler(start);
2 V. ]7 K3 s- T' g n+ u+ Z- |- B else printf("No Euler path\n");
7 k9 s6 m/ ?$ r; w0 Z4 v1 [getchar(); getchar();
1 o) u! }* y6 t1 z" t: [3 creturn 0; } |
|