zoukankan      html  css  js  c++  java
  • 欧拉回路

    【题目描述】

    现给定一个图,询问图中是否存在欧拉回路。

    【输入描述】

    输入多组数据。

    每组数据以以下格式输入:

    第1行给出两个正整数,分别表示节点数N(1 < N < 1000)和边数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

    源代码:
    
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    int n,m,i[1000];
    bool Vis[1000],f[1000][1000];
    bool Check() //欧拉回路中,无向图的每个节点的出度应为偶数。
    {
        for (int a=1;a<=n;a++)
          if (i[a]&1)
            return false;
        return true;
    }
    bool BFS(int T) //宽搜,避免同时存在两个图的情况。
    {
        queue <int> Q;
        memset(Vis,0,sizeof(Vis));
        Q.push(T);
        Vis[T]=true;
        while (!Q.empty())
        {
            int t=Q.front();
            Q.pop();
            for (int a=1;a<=n;a++)
              if (f[t][a]&&!Vis[a])
              {
                Vis[a]=true;
                Q.push(a);
              }
        }
        for (int a=1;a<=n;a++)
          if (!Vis[a])
            return false;
        return true;
    }
    int main() //裸判断是否为欧拉回路图。
    {
        while (scanf("%d",&n)!=EOF)
        {
            if (!n)
              break;
            memset(f,0,sizeof(f)); //初始化。
            memset(i,0,sizeof(i));
            scanf("%d",&m);
            for (int a=0;a<m;a++)
            {
                int t1,t2;
                scanf("%d%d",&t1,&t2);
                i[t1]++; //统计无向图节点的出度。
                i[t2]++;
                f[t1][t2]=f[t2][t1]=true;
            }
            if (!Check())
              puts("0");
            else
              if (BFS(1))
                puts("1");
              else
                puts("0");
        }
        return 0;
    }
  • 相关阅读:
    创建发布Webservice以及wsimport工具
    Webservice介绍
    MongoDB简单认识
    Java集合的介绍
    Java虚拟机(JVM)体系结构概述及各种性能参数优化总结
    Java虚拟机(JVM)
    eclipse, idea安装lombok插件
    在window下, Java调用执行bat脚本
    python3对多线程处理
    Selenium常见元素定位方法和操作的学习介绍
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5930044.html
Copyright © 2011-2022 走看看