题目1027:欧拉回路

题目描述:
    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
输入:
    测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结束。
输出:
    每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
样例输入:
3 3
1 2
1 3
2 3
3 2
1 2
2 3
0
样例输出:
1
0
 1 #include <set>  //1027
 2 #include <map>
 3 #include <list>
 4 #include <cmath>
 5 #include <ctime>
 6 #include <deque>
 7 #include <queue>
 8 #include <stack>
 9 #include <cstdio>
10 #include <string>
11 #include <vector>
12 #include <cctype>
13 #include <cstring>
14 #include <sstream>
15 #include <fstream>
16 #include <cstdlib>
17 #include <cassert>
18 #include <iostream>
19 #include <algorithm>
20  
21  
22  
23 using namespace std;
24  
25 int g[1001][1001];
26  
27 int main()
28 {
29     int n, m;
30     int x, y, i, j;
31     int sum;
32  
33     while(cin >> n >> m)
34     {
35         memset(g, 0, sizeof(g));
36  
37         for(i = 0; i < m; i++)
38         {
39             cin >> x >> y;
40             g[x][y] = g[y][x] = 1;
41         }
42         for(i = 1; i <= n; i++)
43         {
44             sum = 0;
45             for(j = 1; j <= n; j++)
46                 sum += g[i][j];
47  
48             if(sum % 2 == 1)
49             {
50                 cout << '0' << endl;
51                 break;
52             }
53         }
54         if(i == ++n)
55             cout << '1' << endl;
56     }
57  
58     return 0;
59 }

 


posted @ 2013-12-09 20:21  chchche  阅读(217)  评论(0编辑  收藏  举报