一次遍历,直接得出结果,厉害! #include <iostream> #include <cstring> #include <queue> using namespace std ; const int maxn = 200 + 10 ; int nn , ne ; bool G[maxn][maxn] ; int c[maxn] ; void init() { memset( G , false , sizeof( G ) ) ; memset( c , -1 , sizeof( c ) ) ; return ; } int main() { while( cin >> nn ) { if( ! nn ) break ; cin >> ne ; init() ; for( int i = 0 ; i < ne ; ++i ) { int u = 0 ; int v = 0 ; cin >> u >> v ; G[u][v] = true ; } int flag = 0 ; c[0] = 0 ; for( int u = 0 ; u < nn ; ++u ) { for( int v = 0 ; v < nn ; ++v ) { if( u != v && G[u][v] ) { if( c[u] == c[v] && c[v] != -1 ) { flag = 1 ; cout << "NOT BICOLORABLE." << endl ; break ;} else c[v] = ! c[u] ; } } if( flag ) break ; } if( ! flag ) cout << "BICOLORABLE." << endl ; } return 0 ; }