zoukankan      html  css  js  c++  java
  • 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;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    c语言几个字符串处理函数的简单实现
    各种类型排序的实现及比较
    随机洗牌算法Knuth Shuffle和错排公式
    两个栈实现队列
    面试杂题
    面试题——栈的压入、弹出顺序
    Codeforces 455A. Boredom
    PAT A1049. Counting Ones (30)
    Codeforces 895B. XK Segments
    Codeforces 282C. XOR and OR
  • 原文地址:https://www.cnblogs.com/l609929321/p/6550957.html
Copyright © 2011-2022 走看看