两个图节点之间的固定长度路径

时间:2009-10-21 20:16:53

标签: graph nodes points

是否存在一种算法,如果在图表上给出两个节点,则会在它们之间找到一条路径,该路由需要指定的跳数?任何节点都可以连接到任何其他节点。

此刻的点位于2D空间,所以我不确定图表是否是最好的方法。

3 个答案:

答案 0 :(得分:2)

您是否尝试过iterated-deepening DFS

答案 1 :(得分:1)

如果您有节点正在寻找根据跳数查找路线,那么图表可能是正确的方法。我不确定我理解你要做什么以及约束是什么,特别是关于“任何节点可以连接到任何其他节点”......这似乎有点开放。

然而,无视这一点;用一些图表表示:

似乎从第一个节点开始,从那里进行深度优先搜索,并在(a)所采用的跳数大于指定数量或(b)我们到达第二个节点时终止搜索;这将决定连接两个节点(最多)那么多跳的第一条(不仅是)路径。

如果它必须完全是指定的跃点,如果跳过了,则终止搜索的任何分支,如果你也到达了第二个节点,则终止成功。

答案 2 :(得分:1)

哑方法:(数据结构是堆栈数组)。这基本上是做广度优先搜索(BFS)到深度N,除了允许循环(你没有澄清,但我认为它们是),你不排除访问节点进一步搜索。

  1. 将存储在数组中的堆栈上的起始节点推送到索引0(索引=深度)

  2. 对于每个级别/索引“l”0-N:

    对于存储在级别“l”的堆栈上的每个节点,找到它的所有邻居,并将它们推送到存储在级别“l + 1”中的堆栈上。

    重要提示:如果您的任务允许查找包含循环的路径,请不要检查您是否已访问过添加的任何节点。如果它不允许循环,请使用已访问节点的散列不要两次添加任何节点**

  3. 结束等级“N-1”时停止。

  4. 遍历您刚刚添加到索引为“N”的堆栈的所有节点,并找到您的目标节点。如果找到:成功,如果没有,没有这样的路径。

  5. 请注意,如果“每个节点都可以连接”,则表示完全连接图,那么存在一个不涉及实际访问节点的数学答案

    (但是,公式太长,无法在StackOverflow的文本输入字段中写入)