数学建模社区-数学中国
标题:
急求一个Fleury
[打印本页]
作者:
xinzhiyong
时间:
2009-7-17 10:26
标题:
急求一个Fleury
急求一个Fleury算法,求高手来个程序
作者:
lyyy
时间:
2009-7-17 12:23
网上有一些程序代码。
作者:
小旋风假
时间:
2009-8-23 08:57
没有看懂………………
作者:
夕夕多
时间:
2010-5-8 22:58
#include <stdio.h>
5 c; o* u( T# V1 H" Q) W6 L
#include <string.h>
& I* B. D% K7 [, x
struct stack
* p7 ^: ]7 V, \: C( I* ?, M
{int top , node[210];} f; //顶点的堆栈
' z( X7 y# q0 G+ {" C
int a[201][201]; //图的邻接矩阵
0 I* Z1 Z$ e" W6 e% o# ~
int n;
! k2 w* f$ ?! r. D9 P) _' ]) p2 A6 B* }
void dfs(int x) //图的深度优先遍历
# ]8 P+ b J! o) Z8 [3 d, Y) L
{int i;
3 O* A4 l4 N3 o
f.top ++; f.node[f.top] = x;
& s% Q |4 D$ l! }% z7 D% E2 C, m
for (i = 1; i <= n; i ++)
, T" O( S% |$ Y# Z- m
if (a[i][x] > 0)
* t6 g1 p$ o4 w0 T
{ a[i][x] = 0; a[x][i] = 0; //删除此边
) u% [9 v8 O- U7 s8 E
dfs(i);
, n- E' X. E$ |! u* d5 ]
break; }
5 V( K P& r. G" K5 w
}
4 z Z+ g+ t h' u5 x& ^
void Euler(int x) //欧拉路算法
" [: x; w% U- Z, a# \) ^! X) P
{int i , b;
; I, ?( s( i7 E, \4 a$ }: p% k5 G) o
f.top = 0; f.node[f.top] = x; //入栈
5 e! [9 t* H1 z' y3 k
while (f.top >= 0)
$ U2 }2 T' V0 D5 P$ [$ v, W4 A5 n
{b = 0;
$ i. C; B# G: T5 P2 D' `1 E0 w
for (i = 1; i <= n; i ++)
: t, i; W V; k
if (a[f.node[f.top]][i] > 0)
2 F, v' M( K" ~ e6 I3 F
{b = 1; break;}
; R" x, g9 i2 `4 C2 p% R" r
if (b == 0) //如果没有点可以扩展,输出并出栈
* T3 ]% s6 \+ V1 ]/ d
{ printf("%d " , f.node[f.top]);
! J0 o! N! d% T/ q( p1 @. f
f.top --;}
3 p. w) t' p3 W
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
, C9 F0 R" B! ~* Y4 T
}
X) z/ ?. T; I5 H0 s/ F9 O# k
}
/ A0 f7 N, z) O1 E6 l* g. _
int main()
6 k8 {0 M! f( Q
{
$ |5 X0 P; F! a& Z: r
int m , s , t , num , i , j , start;
3 w$ ]8 W# Y+ s3 b3 c/ U
//input
+ p( @' M) I# e8 [& r' Z8 ~" Q
scanf("%d %d" , &n , &m); //n顶点数 m边数
4 ]0 B) Y- D1 A9 J b+ C V7 J+ ]
memset(a , 0 , sizeof(a));
5 m; `" L% K5 x3 Z9 O( A) {
for (i = 0; i < m; i ++)
) p# r. w! w. Z! W' r; |: m! U; i
{printf("innput s,t");
. y8 m: a9 Q9 f7 p! ^' G
scanf("%d %d" , &s , &t);
4 X( _+ ~& l- L
a[s][t] = 1; a[t][s] = 1;
$ V' A9 [. Y K( z4 r
}
5 f, J$ D0 c! U, A$ o
//判断是否存在欧拉回路
, l7 v/ N1 \( ^" ]$ a7 |# H
s = 0; start = 1;
- Z q* E' c) F- a4 |
for (i = 1; i <= n; i ++)
% n$ ?4 ~) k. l' _! {* a# K+ Q) b
{num = 0;
& t2 J) `( t( ~! C
for (j = 1; j <= n; j ++)
1 r1 l6 l1 i& V3 O, D( S
num += a[i][j];
5 l/ @3 ]2 C4 f: ]
if (num % 2 == 1)
& Q/ v- r% Q$ a# V* d$ Y
{start = i; s ++;}
a1 x& q9 {, @1 e' F- G& K
}
1 v: N% p1 Z- `. a- M) F
if ((s == 0) || (s == 2))
M% D4 P: k; A) C
Euler(start);
4 c/ }: `" O- k' x a
else printf("No Euler path\n");
, }; i- k$ F$ i+ b3 n
getchar(); getchar();
8 w7 B3 P: |$ \3 ]0 ~/ E6 O B# X$ j
return 0; }
作者:
parkshinyang
时间:
2012-7-9 00:28
诶 有么有 matlab版的
作者:
屋顶风影
时间:
2013-7-28 22:06
没有matlab版本的吗
+ a4 T& m- S- D/ _! |1 o% ]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5