图论——浅谈理论,DFS序和欧拉序

这篇具有很好参考价值的文章主要介绍了图论——浅谈理论,DFS序和欧拉序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图论——浅谈理论,DFS序、时间戳和欧拉序

提示:本文在树论基础上。

下文图例

图论——浅谈理论,DFS序和欧拉序

DFS 序:1 2 4 5 7 9 8 3 6.
欧拉序:1 2 4 4 5 7 9 9 7 8 8 5 2 3 6 6 3 1.
回加欧拉序:1 2 4 2 5 7 9 7 5 8 5 2 1 2 3 6 3 1.

下文举例均指此图。

DFS 序

周所周知,DFS 为深度优先遍历,其框架如:

void dfs(int u, int fa) {
	for (int v : g[u])
	if (v != fa) dfs(v, u);
}

而 DFS 序就表示,DFS 遍历节点的顺序。

比如第 3 个遍历到的节点为 Q,则 DFS 序的第三个就是 Q。

其框架表示为:

void dfs1(int u, int fa) {
	em.push_back(u);
	for (int v : g[u])
		if (v != fa) dfs(v, u);
}

举例:上图的 DFS 序即为:1 2 4 5 7 9 8 3 6.

DFN 序

一般认为 DFN 序与 DFS 序等价,或者 DFN 序是 DFS 序的逆。

这里采取第二种看法。

也就是 DFS 序的第 \(i\) 项(序列的第 \(i\) 个元素)的 DFN 为 \(i\)

也就是,DFS 序是遍历的顺序,一个序列,记录第 \(x\) 个访问的是什么。

而 DFN 序则是记录第 \(i\) 个元素什么时候(\(x\))访问的。

欧拉序 (2)

为什么后面有个 (2)?看下一个,有 (1) 你就知道了 .

通常认为的欧拉序为,记录每个节点入栈、出栈的顺序。

特性:叶子结点回被记录两次。

其框架表示为:

void dfs2(int u, int fa) {
	em.push_back(u);
	for (int v : g[u])
		if (v != fa) dfs(v, u);
	em.push_back(u);
}

举例:上图的 欧拉序 序即为:1 2 4 4 5 7 9 9 7 8 8 5 2 3 6 6 3 1.

(回加)欧拉序 (1)

有的地方也称为 欧拉序 (1) .

但是这个东西,似乎只有在 st 表求 LCA 的时候能用上()

当然本人水平不够,具体情况具体分析()

回加是我给加的形容词,之所以叫回加,是因为在 DFS 的过程中,当回到一个节点,也记录一次。

特性:叶子结点遍历完直接回到父亲节点,不重复记录。

同时,因为这个特性,当一个节点出栈的时候,不记录,因此叶子节点不会像欧拉序那样出现两次。

void dfs3(int u, int fa) {
	em.push_back(u);
	for (int v : g[u]) {
		if (v != fa) dfs(v, u);
		em.push_back(u);
} }

举例:上图的 回加欧拉序 序即为:1 2 4 2 5 7 9 7 5 8 5 2 1 2 3 6 3 1.

附:DFS 生成树

见:https://oi-wiki.org/graph/scc/#dfs-生成树

后期如果写 Tarjan 的时候再写。

Reference

[1] https://www.cnblogs.com/stxy-ferryman/p/7741970.html
[2] https://zhuanlan.zhihu.com/p/467156796文章来源地址https://www.toymoban.com/news/detail-805053.html

到了这里,关于图论——浅谈理论,DFS序和欧拉序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 图论算法之欧拉路径、欧拉回路算法(一笔画完)

    公众号:编程驿站 本文从哥尼斯堡七桥的故事说起。 哥尼斯堡城有一条横贯全市的普雷格尔河,河中的两个岛与两岸用七座桥连结起来。当时那里的居民热衷于一个话题:怎样不重复地走遍七桥,最后回到出发点。这也是经典的一笔画完问题。 1736 年瑞士数学家欧拉( Eul

    2024年04月17日
    浏览(87)
  • 浅谈牛顿-欧拉方程及其推导

    最近阅读课题论文时看到采用牛顿-欧拉方程来建立动力学方程,尝试系统学习一下这一知识,发现网上资源推导说明不清晰不利于新手入门理解,此文用于记录推导过程以加深理解。 若文中出现错误或误导内容,欢迎指正! 描述刚体的力学变化和运动过程有很多种方法,例

    2024年02月11日
    浏览(42)
  • P5440 【XR-2】奇迹 (大模拟dfs+欧拉筛板子+闰年)

    传送门 https://www.luogu.com.cn/problem/P5440 相信奇迹的人,本身就和奇迹一样了不起。——笛亚 《星游记》 思路历程:很离谱的一题,在理论上并不困难,只要简单dfs+欧拉筛就能过。在一开始,我采用了倒着模拟的思路,用stoi函数,强转字符串,发现样例能跑,但是仍旧RE(现在

    2024年02月19日
    浏览(24)
  • Day31 贪心算法 part01 理论基础 455.分发饼干 376.摆动序列 53.最大子序和

    什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优 。 这么说有点抽象,来举一个例子: 例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿? 指定每次拿最大的,最终结果就是拿走最大数额的钱。 每次拿最大的就是局部最优,最

    2024年01月19日
    浏览(45)
  • 算法训练day31贪心算法理论基础Leetcode455分发饼干376摆动序列53最大子序和

    文章链接 代码随想录 (programmercarl.com) 说实话贪心算法并没有固定的套路 。 最好用的策略就是举反例,如果想不到反例,那么就试一试贪心吧 。 面试中基本不会让面试者现场证明贪心的合理性,代码写出来跑过测试用例即可,或者自己能自圆其说理由就行了 。 刷题或者面

    2024年02月20日
    浏览(47)
  • 离散数学 | 图论 | 欧拉图 | 哈密顿图 | 割点 | 桥(欧拉图和哈密顿图有没有割点和桥?)

    本文主要解决以下几个问题: 1.欧拉图能不能有割点,能不能有桥? 2.哈密顿图能不能有割点,能不能有桥? 首先我们要明白几个定义 割点 的定义就是在一个图G中,它本来是连通的,去掉一个点v以后这个图G就不连通了,那么点v就被叫做 割点 。 桥 的定义就是在一个图G中

    2024年02月08日
    浏览(39)
  • 图论:DFS与BFS

    目录 1.DFS(图论) 1.1.DFS过程 1.2.应用 2.BFS(图论) 2.1.BFS过程 2.2.应用 2.3.双端队列BFS 实现 2.4.优先队列BFS(堆优化 Dijkstra算法) DFS全称是,中文名是深度优先搜索,是一种用于遍历或搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。广义上的DFS:DFS最

    2024年03月24日
    浏览(32)
  • 图论岛屿问题DFS+BFS

    leetcode 200 岛屿问题 BFS代码

    2024年02月09日
    浏览(38)
  • [算法日志]图论: 深度优先搜索(DFS)

    ​ 深度优先搜索算法是一种遍历图这种数据结构的算法策略,其中心思想是朝图节点的一个方向不断跳转,当该节点无下一个节点或所有方向都遍历完时,便回溯朝上一个节点的另一个方向继续遍历。这种搜索策略与回溯法有异曲同工之妙。 正因为和回溯法有相似之处,所

    2024年02月03日
    浏览(63)
  • 图论之dfs与bfs的练习

    dfs--深度优选搜索 bfs--广度优先搜索 迷宫问题--dfs 问题: 给定一个n*m的二维迷宫数组其中S是起点,T是终点,*是墙壁(无法通过), .是道路 问从起点S出发沿着上下左右四个方向走,能否走到T点?能输出\\\"YES\\\",否则输出\\\"NO\\\"。 8 8 *****... *.S...** *****.** *****..* *T..**.* .**.**.* ..*...

    2024年02月20日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包