数学建模社区-数学中国
标题:
急求一个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>
* N. t+ r0 L+ y w2 C9 |! g" m. V
#include <string.h>
7 \5 d+ G8 y6 c
struct stack
: ] g0 a. B4 d. ?& m3 ]2 E$ L% y
{int top , node[210];} f; //顶点的堆栈
: Q7 X, [! ^6 ^# q; k6 P
int a[201][201]; //图的邻接矩阵
" ^! u' e% j. e! }9 ~1 T* f
int n;
0 g. C+ b3 B6 T9 z
void dfs(int x) //图的深度优先遍历
9 J5 h$ B u! a; h
{int i;
A0 b3 e' R" k; I& {' M
f.top ++; f.node[f.top] = x;
# g" V9 s/ Y4 t6 W% [! y
for (i = 1; i <= n; i ++)
9 g, @4 ^0 R& q8 c6 i) [
if (a[i][x] > 0)
6 W8 w |( R* _5 c
{ a[i][x] = 0; a[x][i] = 0; //删除此边
- M2 s) Z u l/ z# q
dfs(i);
5 M/ B2 z8 Y9 B) c# G; ~( J8 F
break; }
+ \ n, j& W% |
}
9 w6 [" E! K1 }8 l6 A
void Euler(int x) //欧拉路算法
4 x1 N/ r/ \* B6 F; k
{int i , b;
* g$ \& A3 h' M* i+ I7 s$ R9 F& S
f.top = 0; f.node[f.top] = x; //入栈
* ~0 r+ o% m4 E
while (f.top >= 0)
8 Q8 O5 S- S4 o, L# C
{b = 0;
# U( c6 P4 r% }) ?
for (i = 1; i <= n; i ++)
5 B, t7 k7 z( B+ Q" J% G
if (a[f.node[f.top]][i] > 0)
' t- `+ a0 m3 W
{b = 1; break;}
2 Z3 E0 \) f, s( Y
if (b == 0) //如果没有点可以扩展,输出并出栈
" }# E! p4 Q) w; i* H6 g- N
{ printf("%d " , f.node[f.top]);
0 Q, q$ B3 D* R
f.top --;}
0 }( Y- _. d; R
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
3 Q1 E. y3 u% U1 l. |: k! r4 v0 [
}
& v$ P/ R2 [: ]
}
1 d5 b$ Q, t0 l# u0 [
int main()
2 B) s/ q, C* g, a
{
# Q" E' \. U& W) e0 o
int m , s , t , num , i , j , start;
. s- j2 O/ G% `, C( ]) r
//input
6 u( u* n* ]" y3 {( H" ]; s; y' E! Y
scanf("%d %d" , &n , &m); //n顶点数 m边数
! b" d8 S5 y; ` u! e
memset(a , 0 , sizeof(a));
/ I8 Y0 M* B! N/ n! l5 Z( k
for (i = 0; i < m; i ++)
, u7 T( m. ]' D3 l% @+ x; {
{printf("innput s,t");
$ o- r6 j. z5 T; B- q' j s2 |" B, A
scanf("%d %d" , &s , &t);
; O. x" G( y) R9 T1 Z, n4 {$ O( v
a[s][t] = 1; a[t][s] = 1;
- c& l$ ^( o6 A' ]+ f6 e
}
3 b% I C+ `% m( t" d% Y; p
//判断是否存在欧拉回路
) w, v3 D8 g$ ]# g" E
s = 0; start = 1;
' {' q1 Q: ^" U3 v/ k3 g0 Z/ C' K
for (i = 1; i <= n; i ++)
3 y# P5 g7 T6 ]0 [; B3 Z+ L. G
{num = 0;
0 h1 \/ \/ O' R, y2 A: j3 x: ]; z
for (j = 1; j <= n; j ++)
6 g& n6 Y7 n8 {! Y5 M) |1 I
num += a[i][j];
( Y. {. ^( Z8 B3 H
if (num % 2 == 1)
4 ~$ \. ?9 P: L: L. W
{start = i; s ++;}
. w# {) f M3 ?& l9 x' p. }
}
4 a# v$ m. l, T* ?. Y1 P1 e( Z
if ((s == 0) || (s == 2))
2 p. p4 _: S( U5 W$ H* a* [
Euler(start);
. H( Z. `2 W1 l4 a
else printf("No Euler path\n");
7 f1 d1 Y' k4 j+ `
getchar(); getchar();
/ b4 r& `3 ?; H# ~3 _# } [! |; A
return 0; }
作者:
parkshinyang
时间:
2012-7-9 00:28
诶 有么有 matlab版的
作者:
屋顶风影
时间:
2013-7-28 22:06
没有matlab版本的吗
" Z! C- M" n- H. b9 N3 V9 w; t
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5