我正在寻找一种算法,告诉我是否可以只走一次单向图的所有边缘。该算法必须能够从任何节点开始并遍历整个图形而无需重新访问相同的边缘。
答案 0 :(得分:4)
如果您的图表符合必要条件,您要查找的内容称为 Eulerian路径,Wikipedia describes a couple of algorithms用于构建一个。
答案 1 :(得分:3)
Seven Bridges of Königsberg是欧拉路径的典型例子。
Hierholzer的算法,from Wikipedia:
选择任何起始顶点v,并跟踪其中的边缘轨迹 顶点直到返回v。不可能卡在任何地方 除了v之外的顶点,因为所有顶点的均匀度确保 当小道进入另一个顶点时,必须有一个未使用的 边缘离开w。以这种方式组建的旅游是一个封闭的旅游,但可能 不覆盖初始图的所有顶点和边。
只要 存在属于当前巡视但具有的顶点v 相邻的边缘不是游览的一部分,从v开始另一条路径, 跟随未使用的边缘直到返回到v,并加入形成的巡回演出 以这种方式进行上一次巡演。
使用诸如a的数据结构 双向链表以保持事件中未使用的边缘集合 每个顶点,以维护当前巡视中的顶点列表 有未使用的边缘,并保持旅游本身,个人 算法的运算(找到离开每个顶点的未使用边, 为旅行找到一个新的起始顶点,并连接两个旅程 共享一个顶点)可以在每个恒定的时间内执行,所以 整体算法需要线性时间。