Hdu 1878

来源:互联网 发布:剑三2016成女捏脸数据 编辑:程序博客网 时间:2024/06/05 15:59

欧拉回路


题意:若是欧拉回路,输出1,否则输出0


分析:先深搜判断是不是属于一个联通分支;再判断奇度数的节点是否为0.


AC代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <vector>#include <algorithm>using namespace std;using std::vector;const int MAXN = 1005;bool vis[MAXN];int deg[MAXN];vector<int > v[MAXN];void Init() {    memset(vis, 0, sizeof(vis));    memset(deg, 0, sizeof(deg));    memset(v, 0, sizeof(v));} void DFS(int x) {    vis[x] = 1;    for(int i = 0; i < v[x].size(); i++) {        int n = v[x][i];        if(!vis[n])             DFS(n);    }}bool ADJ(int n) {    for(int i = 1; i <= n; i++) {        if(!vis[i])            return false;    }    return true;}bool EULER(int n) {    for(int i = 1; i <= n; i++) {        if(deg[i] % 2 != 0)            return false;    }    return true;}int main() {    int n, m;    while(scanf("%d%d", &n, &m)!=EOF && n) {        Init();        int a, b;        for(int i = 1; i <= m; i++) {            scanf("%d%d", &a, &b);            deg[a]++;            deg[b]++;            v[a].push_back(b);            v[b].push_back(a);        }        DFS(a);        if(ADJ(n) && EULER(n))             printf("1\n");        else printf("0\n");    }    return 0;}