JOBDU 1027 欧拉回路

题目1027:欧拉回路

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:3620

解决:1847

题目描述:
    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
输入:
    测试输入包含若干测试用例。每个测试用例的第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
来源:
2008年浙江大学计算机及软件工程研究生机试真题
开始考试的时候完全没有思路,考完后看了几篇网上的博客后才写出来的,我的总结如下
首先,欧拉图的意思是指每条边恰好只走一次,并能回到出发点的路径。
此题为无向图
无向图的时候只要每个顶点的度数都是偶数,就存在欧拉回路。
有向图(所有边都是单向的)的时候需要每个节顶点的入度都等于出度,就存在欧拉回路。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int n,m;
    while(cin >> n&&n)
    {
        if(n==0)
            break;
        int m;
        scanf("%d",&m);
        int d[1010];
        memset(d,0,sizeof(d));
        while(m--)
        {
            int a,b;
            cin >> a >> b;
            d[a]++,d[b]++;
        }
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            if(d[i]%2!=0)//若入度加出度有为奇数的则不存在欧拉回路
                flag=1;
        }
        if(flag)
            printf("0
");
        else printf("1
");
    }

    return 0;
}
彼时当年少,莫负好时光。
原文地址:https://www.cnblogs.com/l609929321/p/6550957.html