题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1878
没啥好说的就是定义,欧拉通路的条件是连通图并且只有两个点的度数是奇数或者没有点的度数是技术,欧拉回路就是在通路的基础上没有点的度数是奇数,当然这是无向图的情况。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(i, s, t) for(int i = s;i <= t;i++)
using namespace std;
struct Edge
{
int v, next;
}edge[1000004];
int head[1005];
int cnt_head;
int vis[1005];
int in[1005];
void add_Edge(int u, int v)
{
edge[cnt_head].next = head[u];
edge[cnt_head].v = v;
head[u] = cnt_head++;
}
void dfs(int root)
{
vis[root] = 1;
for(int i = head[root];~i;i = edge[i].next)
{
int v = edge[i].v;
if(!vis[v])
dfs(v);
}
return;
}
int main()
{
int n, m;
while(scanf("%d%d", &n, &m), n)
{
memset(head, -1, sizeof(head));
cnt_head = 0;
memset(vis, 0, sizeof(vis));
memset(in, 0, sizeof(in));
rep(i, 1, m){
int a, b;
scanf("%d%d", &a, &b);
in[a]++;
in[b]++;
add_Edge(a, b);
add_Edge(b, a);
}
dfs(1);
int flag = 1;
rep(i, 1, n){
if(vis[i] == 0||in[i] % 2 == 1)
{
flag = 0;
break;
}
}
printf("%d\n", flag);
}
return 0;
}