我有一个由节点组成的图,需要一个快速算法来生成两个节点之间的随机路径。我从零开始设计了几种算法,但似乎都无法得到正确的结果。有时算法会陷入循环,或者当我记录已访问的节点时,它有时会卡在已访问的节点之间。我遇到的另一个问题是,我的算法在性能方面太不稳定。因此我的问题是:是否有人知道在无向图中寻找两个可达节点之间的随机路径的快速稳定的算法?
G =(V,E)
。创建一个子集U
,使得U = {u |存在从u到目标的路径}
。U
很容易 - 并且可以使用从目标反向的边缘上的DFS或BFS在线性时间内完成。G' =(U,E')
,其中U
如上所述定义,E' = E [intersection] UxU
[相同的边缘,但仅应用于U
中的顶点]。G'
上运行随机(选择下一个要探索的顶点)DFS,直到到达目标。
visited
集合。这取决于你对“随机”的定义。如果你不关心它的意思,你尝试过蒙特卡洛方法吗?
我猜测一下,假设目标是可达的,并且你有一个无向图的伪代码。
1. <i>s</i> <- start node
2. Choose a random neighbor of <i>s</i>, call that neighbor <i>n</i>.
3. Add the edge from <i>s</i> to <i>n</i> to the path.
4. Set <i>s</i> <- <i>n</i>.
5. Go to 2, unless you've reached the target.
阿米特的注意事项在这里也适用:
n
没有通往目标的路径,你将会陷入无限循环。 - amit