当前位置: 首页 > news >正文

算法学习之路|欧拉回路初见

欧拉道路,一个词概括就是一笔画。一张连通图能用一笔画不重复的走完每一条边的就是欧拉道路,起点和终点是同一点的是欧拉回路。

那么判断一张图是不是欧拉回路就可以通过记录每一点的度数,所有点度数均是偶数的是欧拉回路,有一到两个点度数是奇数的是欧拉道路,有两个点以上是奇数度数的不是欧拉道路。有向图条件更苛刻一点,需要点入度和出度相等才能构成欧拉回路,即使是欧拉道路也需要入度和出度相差仅为一,且这样的店不能超过两个。

七桥问题,给出一张图,判断是否是欧拉回路:

#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int index[1005],du[1005];
int Find(int x)//并查集
{
    if(x==index[x])
        return x;
    else
        return index[x]=Find(index[x]);//回溯直到找到根节点
}
void meet(int x,int y)
{
    int f1=Find(x);
    int f2=Find(y);
    if(f1!=f2)
        index[f1]=f2;
}//已经连接的两个集合并入一个根节点,压缩路径
int main()
{
    int N,M,a,b;
    while(scanf("%d",&N)&&N)
    {
        for(int i=1;i<=N;i++)
            index[i]=i;//并查集初始化
        memset(du,0,sizeof(du));
        scanf("%d",&M);
        while(M--)
        {
            scanf("%d %d",&a,&b);
            du[a]++;
            du[b]++;//记录该点的度,无向图不区分入度出度
            meet(a,b);
        }
        int flag=0;//记录并查集有个数(根节点)
        for(int i=1;i<=N;i++) { if(Find(i)==i) flag++; } if(flag>1)//非连通图不能形成欧拉回路
            printf("0\n");
        else
        {
            flag=0;
            for(int i=1;i<=N;i++)
                if(du[i]%2)//判断点的度数奇偶性
                {
                    flag=1;
                    break;
                }
            if(flag)
                printf("0\n");
            else
                printf("1\n");
        }
    }
    return 0;
}

代码是照着模板敲的,用到了并查集,回顾了一下。

并查集用来判断两个节点是否同属于一个根节点,在这里用来判断图是否是连通图。

并查集把已经确定相互连接的两个集合并入一个集合,

此题只需判断是否欧拉回路,所以不必深究具体的道路,如果是求欧拉道路,判断点的度数使只需加上奇数不超过两个。

相关文章:

  • python3 _笨方法学Python_日记_DAY1
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 提高开发效率之VS Code基础配置篇
  • 【301】IDL与C#混合编程
  • 小总结
  • 【18】万魂杀服务器开发之SDK接入
  • 12c broker fast-start failover - ORA-16820解决
  • Nginx配置——区分PC或手机访问不同域名
  • Eclipse MicroProfile 1.3现已发布
  • VTP的模式(思科)
  • 掀开图片显示介绍的css效果
  • JS判断某变量是否为某数组中的一个值的3种方法
  • Hook技术--Activity的启动过程的拦截
  • AR和VR持续升温,2020年市场规模将达1500亿美元
  • 【转】给Java说句公道话
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 10个确保微服务与容器安全的最佳实践
  • canvas 高仿 Apple Watch 表盘
  • Create React App 使用
  • Hibernate【inverse和cascade属性】知识要点
  • Linux链接文件
  • ReactNative开发常用的三方模块
  • spring boot下thymeleaf全局静态变量配置
  • 大整数乘法-表格法
  • 动态规划入门(以爬楼梯为例)
  • 服务器之间,相同帐号,实现免密钥登录
  • 解决iview多表头动态更改列元素发生的错误
  • 数据结构java版之冒泡排序及优化
  • 思维导图—你不知道的JavaScript中卷
  • 我感觉这是史上最牛的防sql注入方法类
  • 无服务器化是企业 IT 架构的未来吗?
  • #includecmath
  • (1)STL算法之遍历容器
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C语言)字符分类函数
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二)WCF的Binding模型
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)c52学习之旅-流水LED灯
  • (一)80c52学习之旅-起始篇
  • (一)Dubbo快速入门、介绍、使用
  • (一)WLAN定义和基本架构转
  • (原)Matlab的svmtrain和svmclassify
  • (转)jQuery 基础
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Framework .NET Core与 .NET 的区别
  • .Net IOC框架入门之一 Unity
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET中 MVC 工厂模式浅析
  • ::什么意思
  • @Transactional类内部访问失效原因详解