4 c++ algorithm graph-theory graph graph-algorithm
我试图找到这个问题的名称,但不知道如何搜索它。问题如下:
找到图中的路径,从顶点 A 开始,在两个方向上每条边恰好经过所有边两次(一次在一个方向,第二次在相反方向),最后一步再次到达顶点 A。
如果有人给我一些关于如何称呼这个问题的提示(因为它听起来像是一个众所周知的问题),并且可能提供一些解决方案的指导,我会很高兴。
如果您只想在每个方向上遍历连通图的每条边一次,那么您可以使用深度优先搜索:
一旦 DFS 完成,您将在每个方向上恰好遍历每条边一次。
您同样可以使用广度优先搜索而不是深度优先搜索。
如果您想访问一个循环中的所有边缘(不在路径中间回溯),那么您正在寻找欧拉电路/旅行,并且可以使用 Hierholzer 的 1873 算法:
- 选择任何起始顶点 v,并沿着从该顶点开始的边轨迹直到返回到 v。不可能卡在除 v 之外的任何顶点,因为所有顶点的偶数度确保了当轨迹进入另一个顶点时w 必须有一条未使用的边离开 w。这样形成的游览是封闭游览,但可能不会覆盖初始图的所有顶点和边。
- 只要存在属于当前游览的顶点 u,但其相邻边不属于该游览,则从 u 开始另一条路径,沿着未使用的边,直到返回到 u,并将以此方式形成的游览加入到前一个路径中旅游。
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |