# 歐拉回路

Problem Description 歐拉回路是指不令筆離開紙面，可畫過圖中每條邊僅一次，且可以回到起點的一條回路。現給定一個圖，問是否存在歐拉回路？
Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數，分別是節點數N ( 1 < N < 1000 )和邊數M；隨后的M行對應M條邊，每行給出一對正整數，分別是該條邊直接連通的兩個節點的編號（節點從1到N編號）。當N為0時輸入結

Output 每個測試用例的輸出占一行，若歐拉回路存在則輸出1，否則輸出0。

Sample Input
`3 31 21 32 33 21 22 30`

Sample Output
`10`

Author ZJU
Source 浙大計算機研究生復試上機考試-2008年
Recommend We have carefully selected several similar problems for you:  1879 1880 1877 1881 1863

`#include <iostream>#include <sstream>#include <cstring>#include <cstdio>#include <cctype>#include <cmath>#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <vector>#include <algorithm>#define inf 0x3f3f3f3f#define PI 3.14159265358979323#define SCD(a) scanf("%d",&a)#define SCDD(a,b) scanf("%d%d",&a,&b)#define SCF(a) scanf("%lf",&a)#define PTD(a) printf("%d\n",a)#define PTS(a) printf("%s\n",a)#define MST(a) memset(a, 0, sizeof(a))using namespace std;//                      HDOJ 1878int n,m;const int L = 1011;int vis[L], maz[L][L];void bfs(int st){    int i;    for(i=1;i<=n;i++){        if(!vis[i]&&maz[st][i]){            vis[i] = 1;            bfs(i);        }    }}int main(){    while(~SCD(n)&&n){        SCD(m);        MST(vis);        int a, b;        int in[L];  //入度        MST(in);        int i;        MST(maz);        for(i=1;i<=m;i++){            SCDD(a,b);            if(!maz[a][b]){     //去重                maz[a][b] = maz[b][a] = 1;                in[b]++;                in[a]++;            }        }        bfs(1);        bool ans = true;        for(i=1;i<=n;i++){            if(!vis[i]||in[i]%2==1)                 ans = false;        }        if(ans)            PTD(1);        else            PTD(0);    }    return 0;}/*Sample Input3 31 21 32 33 21 22 30Sample Output10*/`