图 欧拉回路

图 欧拉回路欧拉道路 即一笔画 从图的一个结点出发走出一条道路 每条边恰好经过一次欧拉回路 从任意点出发 最终回到该点的欧拉道路 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 移动端开发技术浅析

    移动端开发技术浅析移动端开发技术浅析目录APK下载概述技术介绍技术对比参考资料1.APK下载百度云链接:https://pan.baidu.com/s/1pLp44Fh2.概述“一次编码,处处运行”永远是程序员们的理想乡。二十年前Java正是举着这面大旗登场,击败了众多竞争对手。但是时至今日,事实已经证明了Java笨重的体型和缓慢的发展显然已经很难再抓住这个时代快速跃动的脚步。在

    2022年6月24日
    23
  • 常用sql语句整理:mysql

    常用sql语句整理:mysql

    2021年10月10日
    48
  • vs2010打不开vs2017的.sln文件[通俗易懂]

    vs2010打不开vs2017的.sln文件[通俗易懂]出现错误提示“选择的文件是解决方案文件但是用此应用程序的较新版本创建的,无法打开”解决方案:1、复制下面这段语句MicrosoftVisualStudioSolutionFile,FormatVersion11.00#VisualStudio20102、用记事本方式打开vs2017版本的.sln文件,将上面复制的两行语句替换.sln文件里面前两行语句,保…

    2022年5月23日
    246
  • 《on Java 中文版》读后感(《JAVA编程思想》的原作者)(JAVA 小虚竹)

    《on Java 中文版》读后感(《JAVA编程思想》的原作者)(JAVA 小虚竹)感谢图灵图书的邀请,能提前拜读**BruceEckel**的新作《OnJava8》,**BruceEckel**是《ThinkinginJava》(中文版是**《Java编程思想》(第4版)**)的原作者,**巨佬**(大佬中的大佬)的新书值得期待。

    2022年6月29日
    31
  • 风控模型的基础知识

    风控模型的基础知识风控模型根据设定的y变量与可获得的x变量不同,大致可以分为三类:即A卡,B卡,C卡。今天就让我们聊聊三者的区别。1、A卡(Applicationscorecard)A卡即申请评分模型,此类风控模型的目的在于预测申请时点(申请信用卡、申请贷款)未来一定时间内逾期的概率。Y变量的设定观察点为申请时点,定义为表现期内是否逾期。X变量一般只有客户填写的申请书信息,加上外部查询的数据与征信报告。2、B卡(Behaviorscorecard)B卡即行为评分模型,此类风控模型的目的在于预测使用时点(获得贷

    2022年5月30日
    34
  • 如何解决360浏览器被hao.360.cn主页劫持问题

    如何解决360浏览器被hao.360.cn主页劫持问题360这家公司很奇葩,以流氓软件起家,后面转型为反流氓软件公司,目标是把你电脑上的其他流氓软件干掉,只留下自己家的流氓软件,所以本质没变。但是360家的浏览器易用性还可以,虽然基于GoogleChr

    2022年7月1日
    21

发表回复

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

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