图论 - 从顶点 A 开始,遍历两个方向的所有路径,最后以最短的方式再次到达 A
Graph theory - Start from vertex A, go through all paths in both directions and end up in A again the shortest way
我试图找到这个问题的名称,但真的不知道如何搜索它。问题如下:
在图形中找到从顶点 A 开始的路径,转到 在两个方向上,每条边正好穿过所有边两次(一个 时间在一个方向上,第二次在相反方向上),最后在 顶点 A 再次作为最后一步。
如果有人给我一些关于这个问题如何被称为的提示(因为它听起来像一个众所周知的问题),也许是解决它的一些方向,我会很高兴。
如果您只想在每个方向上遍历连接图的每个边一次,那么您可以使用深度优先搜索:
- 选取任何顶点作为起点。
- 从当前折点中选取任何未访问的事件边。
- 将该边缘标记为已访问。 如果边的另一端是未访问的顶点,则移动到该新顶点,
- 将其标记为已访问,然后从该新顶点重复该过程。
- 如果边的另一端是访问的顶点,则立即回溯(再次遍历边,但方向相反)并继续处理连接到当前顶点的边。
- 访问当前顶点的所有事件边后,沿着最初将您带到该折点的边回溯,并返回处理连接到该前一个折点的边。
DFS 完成后,您将在每个方向上恰好遍历每条边一次。
同样可以使用广度优先搜索,而不是深度优先搜索。
如果你想访问一个循环中的所有边(在路径中间没有回溯),那么你正在寻找一个欧拉回路/巡回,可以使用Hierholzer的1873算法:
维基百科
- 选择任何起始顶点 v,然后沿着该顶点的边轨迹,直到返回到 v。不可能卡在 v 以外的任何顶点,因为所有顶点的偶数度确保当轨迹进入另一个顶点 w 时,必须有一个未使用的边离开 w。以这种方式形成的游览是封闭游览,但可能无法覆盖初始图形的所有顶点和边。
- 只要存在属于当前游览但相邻边不属于游览的顶点 u,就可以从 u 开始另一条路径,沿着未使用的边直到返回给您,然后加入以这种方式形成的游览到上一个游览。
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- lower_bound()返回最后一个元素
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从控制台中删除最后打印的元素
- 获取向量C++中第一个值和最后一个值的和
- 从函数角度看ID到文件路径的内部与外部映射
- 获取用C/C++打印的最后一个字符串
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 读取最后一行代码算法 - c++ 时出现问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 按边长度递归搜索图中所有可行路径
- 图论 - 从顶点 A 开始,遍历两个方向的所有路径,最后以最短的方式再次到达 A
- 如何找出传递路径的最后一部分是文件、目录还是掩码