欧拉回路判定

欧拉回路判定通过图 无向图或有向图 中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路 通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路 具有欧拉回路的图称为欧拉图 EulerGraph 具有欧拉通路而无欧拉回路的图称为半欧拉图 1 定义欧拉通路 Eulertour 通过图中每条边一次且仅一次 并且过每一顶点的通路 欧拉回路

通过图(无向图或有向图)中所有边一次且仅一次行遍图中所有顶点的通路称为欧拉通路,通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路。具有欧拉回路的图称为欧拉图(Euler Graph),具有欧拉通路而无欧拉回路的图称为半欧拉图。

        1 定义

        欧拉通路(Euler tour)——通过图中每条边一次且仅一次,并且过每一顶点的通路。

        欧拉回路 (Eulercircuit)——通过图中每条边一次且仅一次,并且过每一顶点的回路。

        2 无向图是否具有欧拉通路或回路的判定

        G有欧拉通路的充分必要条件为:G 连通,G中只有两个奇度顶点(它们分别是欧拉通路的两个端点)。

        G有欧拉回路(G为欧拉图):G连通,G中均为偶度顶点。

        3 有向图是否具有欧拉通路或回路的判定

        D有欧拉通路:D连通,除两个顶点外,其余顶点的入度均等于出度,这两个特殊的顶点中,一个顶点的入度比出度大1,另一个顶点的入度比出度小1。

        D有欧拉回路(D为欧拉图):D连通,D中所有顶点的入度等于出度。

        (注意:这里说有向图连通,说的是有向图是弱连通图。即把有向图中的边变成无向边,只要该图连通,那么原有向图即是弱连通图。实际中可用并查集判断是否弱连通)

         注意下面打印节点的代码,其实打印欧拉路径的节点轨迹可以先打印每条欧拉路上的边,然后取每条边的头结点即可(最后一条边还需要取尾部结点)。

         对于一般的单词首尾相连的问题,一般都是转化为有向图的欧拉通路问题(而不是无向图),比如”给你多个单词,问你能不能将所有单词组成这样一个序列:序列的前一个单词的尾字母与后一个单词的头字母相同”,如果你把每个单词看出无向的边,那么最终求出的欧拉通路可能存在两个单词尾部和尾部相连的情况。

例题:

欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?

Input

Output

每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。 

Sample Input

3 3 1 2 1 3 2 3 3 2 1 2 2 3 0

Sample Output

1 0

直接上模板

#include 
  
    #include 
   
     using namespace std; const int maxn=1005; int visit[maxn],d[maxn][maxn],degree[maxn]; int n,m; void dfs(int s) //判断图是否联通 { visit[s]=1; for(int i=1;i<=n;i++) { if(d[s][i]&&!visit[i]) dfs(i); } } int main() { ios::sync_with_stdio(false); while(cin>>n&&n) { memset(visit,0,sizeof(visit)); memset(d,0,sizeof(d)); memset(degree,0,sizeof(degree)); cin>>m; int a,b; for(int i=0;i 
    
      >a>>b; d[a][b]=d[b][a]=1; degree[a]++; degree[b]++; } dfs(1); bool flag=true; for(int i=1;i<=n;i++) { if(!visit[i]) flag=false; if(degree[i]%2!=0) flag=false; } if(flag) cout<<"1"< 
      
     
    
  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224296.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:15
下一篇 2026年3月17日 下午12:16


相关推荐

  • Mac Charles抓包配置

    Mac Charles抓包配置MacCharles抓包配置1.基本安装直接在官网下载,需要破解的同学可以使用这个,我也是借花献佛,这样你可以时刻来抓包了,RegisteredName:https://zhile.ioLicenseKey:48891cf209c6d32bf4找不到在哪设置license的同学看下图:2CA证书安装点击安装后,会自动打开钥匙串,一定要记住进入钥匙串,点击Charles…

    2022年6月9日
    59
  • iOS开发常用国外网站清单

    iOS开发常用国外网站清单工欲善其事必先利其器,最近发现临时查找一些东西容易浪费时间,花了点时间整理一下常用的网站,方便以后备用。国内的code4app,ui4app,cocoachina,oschina,csdn就不说了,基本上很好用。不过国外网站上的好东西更多,可惜找起来也更费时间,需要整理一下。主要分开发教程、示例项目、UI设计、问题解决几块。开发教程:即便过了入门阶段,还是要

    2022年7月12日
    20
  • 5个Web前端开发软件,零基础入门完全够用了!

    对于刚刚入行不久的Web前端编程小白来说,在开发工具的选择方面或许会显得有些力不从心,毕竟网络上众说纷纭,相关的开发工具也是非常之多,以至于许多小伙伴一时不知道从何下手。为了解决这个问题,今天就为大家介绍几个不错的开发工具,感兴趣的朋友可以自己尝试一下:1、Notepad++这个软件就不多说了,记事本的增强版,主要应用在Windows平台下,大部分人都应该使用过,非常轻巧灵活,运行速度快,支持多窗口切换,可编辑语言也非常多,自动补全、语法提示和检查等功能都不错,对于前端开发入门来说,可以作为一个不错的选

    2022年4月9日
    55
  • apache2服务器_apache2配置

    apache2服务器_apache2配置摘要:在本地做WEB开发,同时多个项目,希望将每个项目都使用一个域名指向各自的项目根目录。要实现这样的目的,虚拟主机是必须要掌握的。本篇从一个小白用户的视角开始从零开始深入了解并实例配置演示。

    2026年1月20日
    5
  • SQL中SELECT语句详解「建议收藏」

    SQL中SELECT语句详解「建议收藏」本篇文章讲述SQL语句中的SELECT查询语句,以供参考,如有错误或不当之处还望大神们告知。简单查询SELECT-FROM用于无条件查询单张表中的行或列假设有表如图所示查询名字叫‘叶清逸’的记录:select*fromT_USERwhereu_name=’叶清逸’;查询结果:查询一个或多个属性,u_name,u_age,u_scor…

    2022年4月29日
    58
  • linux打开串口lazarus,Lazarus开发串口通信

    linux打开串口lazarus,Lazarus开发串口通信Lazarus 的设计目标是应用 FreePascal 所以所有凡是 FreePascal 能运行的平台 Lazarus 都可以运行 版本能运行于 Linux Win32 和 FreeBSD 整个界面的外观和操作和 DelphiIDE 一样 因此 如果你会使用 Delphi 的话 用起 LazarusIDE 来就一定能得心应手了 引集成开发环境 Lazarus 是一个用于 FreePascal 的快速应用开发 RAD 的面向

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号