zoj3321 Circle(搜索)

本文介绍了一种基于深度优先搜索(DFS)的简单算法,用于判断一个无向图是否包含欧拉回路。通过递归的方式遍历图中所有边,并确保每条边仅被访问一次。如果从任意起点出发能回到起点且访问了所有边,则认为该图存在欧拉回路。

/*

   简单的搜索,欧拉回路的判断

*/

ContractedBlock.gifExpandedBlockStart.gifView Code
 1 #include <iostream>
2 #include <cstring>
3
4 using namespace std;
5
6 bool maps[ 11 ][ 11 ];
7 bool used[ 11 ];
8
9 bool dfs( int n, int s, int d )
10 {
11 if ( d == n ) return true;
12 bool value = false;
13 for ( int i = 1 ; i <= n ; ++ i )
14 if ( !used[ i ] && maps[ s ][ i ] ) {
15 used[ i ] = true;
16 value |= dfs( n, i, d+1 );
17 used[ i ] = false;
18 }
19 return value;
20 }
21
22 int main()
23 {
24 int n,m,a,b;
25 while ( cin >> n >> m ) {
26 bool flag = true;
27 memset( maps, 0, sizeof( maps ) );
28 memset( used, 0, sizeof( used ) );
29 for ( int i = 0 ; i < m ; ++ i ) {
30 cin >> a >> b;
31 maps[ a ][ b ] = maps[ b ][ a ] = true;
32 }
33 used[ 1 ] = true;
34
35 if ( m == n && dfs( n, 1, 1 ) )
36 cout << "YES" << endl;
37 else
38 cout << "NO" << endl;
39 }
40 return 0;
41 }

转载于:https://www.cnblogs.com/-xiaobai-/archive/2011/08/17/2143101.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值