题目:判断欧拉回路。
分析:搜索。
说明:(2011-09-19 01:24)。
#include <iostream>
#include <cstring>
using namespace std;
bool maps[ 11 ][ 11 ];
bool used[ 11 ];
bool dfs( int n, int s, int d )
{
if ( d == n ) return true;
bool value = false;
for ( int i = 1 ; i <= n ; ++ i )
if ( !used[ i ] && maps[ s ][ i ] ) {
used[ i ] = true;
value |= dfs( n, i, d+1 );
used[ i ] = false;
}
return value;
}
int main()
{
int n,m,a,b;
while ( cin >> n >> m ) {
bool flag = true;
memset( maps, 0, sizeof( maps ) );
memset( used, 0, sizeof( used ) );
for ( int i = 0 ; i < m ; ++ i ) {
cin >> a >> b;
maps[ a ][ b ] = maps[ b ][ a ] = true;
}
used[ 1 ] = true;
if ( m == n && dfs( n, 1, 1 ) )
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}