图问题的算法

时间:2009-07-27 12:14:42

标签: c# algorithm graph

我需要检查列表中定向节点的连通性。 基本上是问题,每个问题有2到7个答案。选择的答案决定了下一个问题。 由于这些对将被手动捕获,我需要检查每个可能的路径以循环(不允许)和死角(所有路由必须在END节点处停止) 有什么指针吗?

start --> n1 --- n2 --- n3 --- n4 --- end

            \  /   \      \   /       /

             n5     \      n6------ n7

              \      \     /       /

               n8----n9---n10----n11

          DIRECTION -->

2 个答案:

答案 0 :(得分:4)

这可能是您正在寻找的:

Testing whether a graph is acyclic

您的END节点是叶子节点在该页面的术语中的内容。

  1. 如果图表没有节点,则它是非循环的。
  2. 如果图表没有叶子,则它是循环的。
  3. 选择任何叶子,移除叶子及其所有过渡,转到步骤1.
  4. 要检查没有死角:在使用上述算法之前,只需确保只有一个叶节点。

答案 1 :(得分:3)

使用breadth first search算法,跟踪您已访问过的所有节点。如果,当搜索下一个要遍历的节点时,已经访问过的节点之一是可能的,那么图形是错误的。此外,如果您到达的节点没有其他可能的节点可以遍历到下一个节点,并且您还没有到达结尾,那么图表也没有正确连接。