- 在线时间
- 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>
7 z" \* U$ ]5 R#include <string.h>
3 m+ a; f5 o O2 ~; \3 Z9 T! t! Sstruct stack; N$ B6 C6 q& o+ s7 Z& ^' O' r* R
{int top , node[210];} f; //顶点的堆栈! E& O# ~( @. i3 W% f
int a[201][201]; //图的邻接矩阵
; ~% K* w" u/ {. {* @9 Jint n;
) |& r4 r( z4 U: A& g* R' Svoid dfs(int x) //图的深度优先遍历# N) Q q& K2 m, n. k
{int i;
/ t$ Q4 }# D& k0 L' \ N5 {f.top ++; f.node[f.top] = x;1 R ~0 a% }+ c" H0 u. T) K4 p$ C' g
for (i = 1; i <= n; i ++)
6 ~) c( F1 `% X% Mif (a[i][x] > 0)8 U" {( b; i. T. R9 v+ ?, G
{ a[i][x] = 0; a[x][i] = 0; //删除此边
: \5 h1 P. B. [: r$ Sdfs(i); k4 ~1 f y, T: T# D4 n$ p- }8 Z
break; }- d* C4 J$ c; I2 v
}% t' x* I9 R& @0 {
void Euler(int x) //欧拉路算法
6 [" V6 h- z( H: W% f8 H{int i , b;; [) b! z* Q1 G$ M
f.top = 0; f.node[f.top] = x; //入栈$ ?, [5 }- _7 a( V$ K6 ]* L* E
while (f.top >= 0)
/ H5 v% p" Y/ k- Y6 a1 _( R{b = 0;
0 n7 u' l* t& T8 Y! o J for (i = 1; i <= n; i ++) , n4 C6 N1 ~& O
if (a[f.node[f.top]][i] > 0)
, ^, i0 p0 s& M" r' g0 F{b = 1; break;}; \* Y0 `6 y. u9 c9 L7 I
if (b == 0) //如果没有点可以扩展,输出并出栈3 l% d: x1 V" p) F$ E- C3 `
{ printf("%d " , f.node[f.top]);% Q C8 e) t6 J% U- L! k& ^
f.top --;}
4 [$ p* n* B( Xelse {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS
$ ]9 Y" P5 |. C+ d$ C, X! e}
F2 N! G( w. [: P}
! C$ ~, P# v+ ?9 j% Sint main()1 `+ o( p7 ?$ U4 d/ x+ D! Y- v
{
2 F0 Z" L o' X- [' D- p2 j( `int m , s , t , num , i , j , start;
' F- m# z- v) N //input; } \" X S ^! Y. c+ C
scanf("%d %d" , &n , &m); //n顶点数 m边数
0 b4 u, h' m7 d% v lmemset(a , 0 , sizeof(a));
6 z4 E1 W0 f8 v% T for (i = 0; i < m; i ++)
, Q* w" E' N7 a A/ }. p% ?0 l{printf("innput s,t");
7 b9 f9 Y9 Q0 i0 h8 w+ \& S scanf("%d %d" , &s , &t);
; i( c0 j+ ~( Y* V8 B/ Q! X% d a[s][t] = 1; a[t][s] = 1;% X" L8 y# ~" N/ q% S6 l1 w0 `
}1 Z, j/ p+ u7 C. b" \
//判断是否存在欧拉回路6 Q; `2 c; l. m8 c
s = 0; start = 1;
, f* u% T; \) w0 b for (i = 1; i <= n; i ++)
3 `6 x- M* Y- J% @{num = 0;9 l" r$ K3 q" J2 G
for (j = 1; j <= n; j ++)' i% B( h- g9 \
num += a[i][j];* ]% W( a7 ?' E; ]5 |
if (num % 2 == 1)
& _9 J+ G H4 ^4 X# `{start = i; s ++;}
# k, q6 p! I2 q5 [4 L: `. m, G6 o- v}* b6 E- Y/ R' F0 d
if ((s == 0) || (s == 2))
3 y5 s1 d9 u6 \ g+ _$ J- xEuler(start);
$ x( }; k7 \! u else printf("No Euler path\n");, S. C/ K' }1 Y2 `; V4 z
getchar(); getchar();
9 E d2 Z3 A' E0 d' b) treturn 0; } |
|