图论 - 从顶点 A 开始,遍历两个方向的所有路径,最后以最短的方式再次到达 A

Graph theory - Start from vertex A, go through all paths in both directions and end up in A again the shortest way

本文关键字:最后 路径 方式再 两个 开始 顶点 遍历 图论 方向      更新时间:2023-10-16

我试图找到这个问题的名称,但真的不知道如何搜索它。问题如下:

在图形中找到从顶点 A 开始的路径,转到 在两个方向上,每条边正好穿过所有边两次(一个 时间在一个方向上,第二次在相反方向上),最后在 顶点 A 再次作为最后一步。

如果有人给我一些关于这个问题如何被称为的提示(因为它听起来像一个众所周知的问题),也许是解决它的一些方向,我会很高兴。

如果您只想在每个方向上遍历连接图的每个边一次,那么您可以使用深度优先搜索:

  • 选取任何顶点作为起点。
  • 从当前折点中选取任何未访问的事件边。
    • 将该边缘标记为已访问。
    • 如果边的另一端是未访问的顶点,则移动到该新顶点,
    • 将其标记为已访问,然后从该新顶点重复该过程。
    • 如果边的另一端是访问的顶点,则立即回溯(再次遍历边,但方向相反)并继续处理连接到当前顶点的边。
    • 访问当前顶点的所有事件边后,沿着最初将您带到该折点的边回溯,并返回处理连接到该前一个折点的边。

DFS 完成后,您将在每个方向上恰好遍历每条边一次。

同样可以使用广度优先搜索,而不是深度优先搜索。

如果你想访问一个循环中的所有边(在路径中间没有回溯),那么你正在寻找一个欧拉回路/巡回,可以使用Hierholzer的1873算法:

维基百科

  • 选择任何起始顶点 v,然后沿着该顶点的边轨迹,直到返回到 v。不可能卡在 v 以外的任何顶点,因为所有顶点的偶数度确保当轨迹进入另一个顶点 w 时,必须有一个未使用的边离开 w。以这种方式形成的游览是封闭游览,但可能无法覆盖初始图形的所有顶点和边。
  • 只要存在属于当前游览但相邻边不属于游览的顶点 u,就可以从 u 开始另一条路径,沿着未使用的边直到返回给您,然后加入以这种方式形成的游览到上一个游览。