3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
1 0
#include <cstdio> #include <cstring> #include <queue> #define SIZE 1010 using namespace std ; bool graph[SIZE][SIZE] , vis[SIZE]; int degree[SIZE] ; bool bfs(int pos ,int n) { queue<int> que ; que.push(pos) ; while(!que.empty()) { int tmp = que.front() ; que.pop() ; for(int i = 1 ; i <= n ; ++i) { if(!vis[i] && graph[tmp][i]) { vis[i] = true ; que.push(i) ; } } } for(int i = 1 ; i <= n ; ++i) { if(!vis[i]) return false ; } return true ; } int main() { int n , m ; while(~scanf("%d",&n) && n) { scanf("%d",&m) ; memset(graph,false,sizeof(graph)) ; memset(degree,0,sizeof(degree)) ; for(int i = 0 ; i < m ; ++i) { int x , y ; scanf("%d%d",&x,&y); graph[x][y] = graph[y][x] = true ; degree[x]++ , degree[y]++ ; } bool flag = true ; for(int i = 1 ; i <= n ; ++i) { if(degree[i]%2!=0) { flag = false ; break ; } } if(!flag) puts("0") ; else if(bfs(1,n)) { puts("1") ; } else puts("0") ; } return 0 ; }
原文:http://blog.csdn.net/lionel_d/article/details/45306365