这道题据说有问题,但是是欧拉回路一类的问题是确定无疑的 #include <iostream> #include <cstring> using namespace std ; const int maxn = 200 + 10 ; bool G[maxn][maxn] ; bool visit[maxn] ; int d[maxn] ; int cnt ; void init() { memset( G , false , sizeof( G ) ) ; memset( d , 0 , sizeof( d ) ) ; memset( visit , false , sizeof( visit ) ) ; cnt = 0 ; return ; } //判断是否有度数为奇数的点(欧拉回路中所有点的度数都为偶数) bool check( int n ) { for( int i = 0 ; i < n ; i++ ) if( d[i] && d[i] & 1 ) return true ; return false ; } void dfs( int n , int u ) { visit[u] = true ; cnt++ ; for( int i = 0 ; i < n ; ++i ) if( ! visit[i] && G[u][i] ) dfs( n , i ) ; return ; } int main() { int nr , nn ; while( cin >> nn >> nr ) { init() ; for( int i = 0 ; i < nr ; i++ ) { int u , v ; cin >> u >> v ; G[u][v] = true ; d[u]++ ; d[v]++ ; } bool flag = check( nn ) ; if( flag ) cout << "Not Possible" << endl ; else { dfs( nn , 0 ) ; //如果并非所有边都走完 if( cnt != nn ) cout << "Not Possible" << endl ; else cout << "Possible" << endl ; } } return 0 ; }