图 欧拉回路

图 欧拉回路欧拉道路 即一笔画 从图的一个结点出发走出一条道路 每条边恰好经过一次欧拉回路 从任意点出发 最终回到该点的欧拉道路 1 前提 忽略边的方向后 图是连通的 dfs bfs 并查集 2 条件 有向图 最多只有两个点的入度不等于出度 且相差的绝对值是 1 无向图 最多只有两个点的度是奇数 3 若有特殊点 则特殊的点为起点 若无任意点都可为起点寻找路径方法 DFS 构造一般的版本 void

一般的版本

void euler(int u) { for (int v = 0; v < n; ++v) if (G[u][v] && !vis[u][v]) { vis[u][v] = vis[v][u] = 1; euler(v); path.push_back(v); } }

递归版本(图很大,不能用邻接矩阵)

#include<iostream> #include<vector> using namespace std; const int maxn = 10005; const int maxm = ; struct Edge{ int M,vis;//M是u+v Edge(int a = 0,int c = 0) : M(a), vis(c) {}; }; vector<Edge> Edges; vector<int> G[maxn];//G[k]代表k结点相连的路径编号(Edges[]编号) vector<int> path; int n, m,a,b; void euler(int u) { for (int i=0;i<G[u].size();++i) if (!Edges[G[u][i]].vis) { int v = Edges[G[u][i]].M - u; Edges[G[u][i]].vis = 1; euler(v); path.push_back(v); } }

迭代版本(栈溢出的情况下使用)

#include<iostream> #include<vector> using namespace std; const int maxn = 10005; const int maxm = ; struct Edge{ int M,vis; Edge(int a = 0,int c = 0) : M(a), vis(c) {}; }; vector<Edge> Edges; vector<int> G[maxn];//G[k]代表k结点相连的路径编号(Edges[]编号) vector<int> path; int n, m,a,b,i; Edge x; vector<Edge> sta;//代表:M=u,vis=i void euler(int u) { i = 0; while (1) { for (; i<G[u].size(); ++i) if (!Edges[G[u][i]].vis) { int v = Edges[G[u][i]].M - u; Edges[G[u][i]].vis = 1; sta.push_back(Edge(u, i)); u = v; i = 0; break; } if (!i) continue;//只有break下来的i是等于0的,其他都是>0,不存在不连通图的欧拉路径 if (sta.empty()) break; x = sta.back(); sta.pop_back(); u = x.M, i = x.vis; path.push_back(Edges[G[u][i++]].M - u); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1.7-工控上位机软件开发平台介绍

    1.7-工控上位机软件开发平台介绍一、前言前面几章一直没有提到上位机的另一个主要使用场合,即“工业上位机软件”。主要是因为本人没有接触过,不敢贸然发表见解类的文章。最近在机缘巧合下,对“工业上位机软件”有了一些初步的了解。在这里和大家分享一下。注意本节的内容还不够专业全面,只适合对“工控软件”进行一个初步的了解。二、工业“自动化”控制系统的组成在工业生产过程中,最重要的是安全,其次是稳定。工业生产环境中可以常见大如“吊车”般的设备、有毒气体、强碱、强酸、几千度的高温、易燃易爆气体、高压水蒸气。所以容不得半点错误,出错就意味着要死人,因

    2022年5月31日
    80
  • android rsa加密工具类,GitHub – Lerist/encrypt: Android 加密解密工具包。「建议收藏」

    android rsa加密工具类,GitHub – Lerist/encrypt: Android 加密解密工具包。「建议收藏」Encrypt(加密工具)字符串,byte[],文件等对象的加密和解密工具集合,包含了多种加密方案。加密类型摘要相关方法简单加密换一种编码格式Base64Util单向加密只能加密,不能解密MD5Util、SHAUtil对称加密使用相同的秘钥加密和解密AESUtil、DESUtil非对称加密分公钥和私钥,一个加密,另一个解密RSAUtil使用方法Base64util方法摘要Stringbase6…

    2022年5月17日
    39
  • windows开机后一键启动应用程序[通俗易懂]

    一键启动办公软件小工具分享每天上班前打开电脑总有一些固定的软件需要打开(如Foxmail、QQ等),那么一个一个启动非常会比较麻烦,下面分享一下小工具,稍微进行简单的配置后,便可以一键启动你想要打开的软件!

    2022年2月26日
    52
  • cmd进入目录后怎样运行exe_命令提示符怎样进入文件所在目录

    cmd进入目录后怎样运行exe_命令提示符怎样进入文件所在目录如何用Windows命令提示符(cmd.exe)进入指定目录如何用Windows命令提示符(cmd.exe)进入指定目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录如何用Windows命令提示符(cmd.exe)进入指定目录前言一、Windows命令提示符是什么?二、使用步骤1.打开命令提示符总结新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPa

    2022年10月15日
    0
  • java.io.outputstream_java input

    java.io.outputstream_java inputio流概述:IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中。IO流分类按照数据流向输入流读入数据输出流写出数据按照数据类型字节流字符流什么情况下使用哪种流呢?如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流,其他用字节流。如果你什么都…

    2022年9月21日
    0
  • yiq颜色模型应用于_如果rgb色彩模式中

    yiq颜色模型应用于_如果rgb色彩模式中00.目录文章目录00.目录01.YIQ模式概述02.NTSC制式03.YIQ模式优势04.RGB转YIQ05.附录01.YIQ模式概述YIQ,是NTSC(NationalTelevisionStandardsCommittee)电视系统标准。Y是提供黑白电视及彩色电视的亮度信号(Luminance),即亮度(Brightness),I代表In-phase,色彩从橙色到青色,Q代表Quadrature-phase,色彩从紫色到黄绿色。02.NTSC制式NTSC制式,又简称

    2022年10月24日
    0

发表回复

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

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