如何在有向图中找到从节点A到节点B的道路数量?

时间:2011-05-28 09:43:36

标签: algorithm graph directed-graph

我给出了一个图表,它可以比两个节点之间的一个拱门更多

示例:

4个节点 1→2 2→3 的 3→4 3→4 1→4

哪种方法可以找到从节点A到节点B的道路数量?

该示例的答案是3:1-> 2-> 3-> 4; 1-> 2-> 3-> 4和1-> 4

节点和拱门的限制为1 000 000

我只是在考虑强力算法。

还有其他想法吗? 编辑:

图是非循环的

2 个答案:

答案 0 :(得分:1)

如果图形是循环的,则结果为+无穷大,因为您可以根据需要在一个循环中运行。

一个可能适用于非循环有向图的想法:

  • 以某种方式对所有节点进行排序,以便对于任何两个连接的节点,父节点始终位于子节点
  • 之前
  • 将0分配给所有节点
  • 将1分配给起始节点
  • 从start节点开始按顺序迭代节点,然后执行
    • 如果节点是您已完成的结束节点
    • 从该节点开始的Foreach连接(即它是父节点)
      • 将当前节点的值添加到子节点
  • 分配给结束节点的编号是您想要的结果

虽然在节点中排序并非易事。但我确信你可以找到一个算法,因为这是使用DAG时的一个常见问题。

答案 1 :(得分:0)

没有最佳方式。这个问题是NP完全问题。 http://en.wikipedia.org/wiki/Feedback_vertex_set

你只能找到好的解决方案