- 在线时间
- 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>" ?+ k& [ d! n8 b, W
#include <string.h>
5 A- w3 Q5 D; O$ e7 J! }' z sstruct stack
) H; A; H% q* L6 f# R$ A{int top , node[210];} f; //顶点的堆栈% p& P/ m; r7 p4 N `% X* d
int a[201][201]; //图的邻接矩阵
7 [1 L4 R: s3 W$ ~- aint n;
6 N+ m0 }0 F& R, i# Q( J" ]) ovoid dfs(int x) //图的深度优先遍历 X& |& ]: v) A
{int i;/ `; g9 s1 o2 z3 c' U
f.top ++; f.node[f.top] = x;7 b+ g( L0 _/ m# {
for (i = 1; i <= n; i ++)0 K' j# L) S# L8 X) R
if (a[i][x] > 0)5 u0 X7 n- a- Q+ ^
{ a[i][x] = 0; a[x][i] = 0; //删除此边
9 L: ?! {9 d0 U. N. Y& Ydfs(i);
6 T D% g( {( n1 K0 Ibreak; }
: P' O7 X) ~& k3 ?+ s}
5 m2 @7 N( C1 }3 A3 Y+ yvoid Euler(int x) //欧拉路算法
2 D' O9 j3 |( e7 q& U5 Q{int i , b;2 |- R) l7 D9 ?
f.top = 0; f.node[f.top] = x; //入栈
* O7 {' @ _& R0 t% _while (f.top >= 0)" T( l. N5 n7 ]: D
{b = 0;
3 m6 i& H# U. k8 @5 B for (i = 1; i <= n; i ++) : x: U) z j4 D! y' O
if (a[f.node[f.top]][i] > 0) 8 m6 R1 ?4 J- }
{b = 1; break;}" {4 _: G' `1 H
if (b == 0) //如果没有点可以扩展,输出并出栈
! h* g) J; V, ?5 g" V{ printf("%d " , f.node[f.top]);
% r" x$ l* y+ R( V6 y f.top --;}1 `0 u: b) J0 n
else {f.top --; dfs(f.node[f.top+1]);} //如果有,就DFS; ~$ w, B7 n2 z+ ?2 J
}
/ w3 }) X& t- ]# F8 N. s8 @) R}: I0 w; z& U# ?7 x
int main()
; k" Q3 ?# e7 x{9 y" T+ I3 x$ M3 H
int m , s , t , num , i , j , start;+ r3 W' |; R) |) h) M/ E
//input
/ _1 |. E5 j( T4 H# A; a7 Yscanf("%d %d" , &n , &m); //n顶点数 m边数
; \# s7 w/ z) _7 f5 C( {9 o. |. _) tmemset(a , 0 , sizeof(a));
, T$ o3 P7 C- H% y; A4 h for (i = 0; i < m; i ++)# t3 `- t" o+ ^8 x2 [
{printf("innput s,t");$ N& v2 E/ c8 ^4 c0 P% V7 i6 Q
scanf("%d %d" , &s , &t);
) C3 S1 Y x8 a2 a+ }+ _+ Z0 q a[s][t] = 1; a[t][s] = 1;0 ^- R- V( ?0 v0 F: I
}
+ _% y: P8 _9 M t //判断是否存在欧拉回路
, Z `$ R z* P8 ]7 o9 Ts = 0; start = 1;
0 B% w x' B7 a4 A6 k. z$ e: r, }6 G for (i = 1; i <= n; i ++)
9 O! u3 F, A" F1 P! K$ w{num = 0;
# M# i" J& ]. z Z9 bfor (j = 1; j <= n; j ++)
( B$ c8 o7 o2 V$ |+ e% } num += a[i][j];
: A) u3 H% H7 _( |. k if (num % 2 == 1) 7 }% A/ H& b. E
{start = i; s ++;}
% b- O% p4 [, R0 i* n1 a/ A9 z}
0 [, l9 M2 F8 z8 [( f$ ?if ((s == 0) || (s == 2)) : X$ y' b, M/ C
Euler(start);! k- H' h! w1 L* f1 y1 y8 u
else printf("No Euler path\n");: h: D4 y0 a6 O$ N# x1 ]
getchar(); getchar();3 ^0 K+ N% Y$ {
return 0; } |
|