【问题标题】:Topological sort to find dependencies of a specific node拓扑排序以查找特定节点的依赖关系
【发布时间】:2013-01-05 16:32:28
【问题描述】:

鉴于以下graph

我可以使用什么算法来输出拓扑有序列表以及要完成的任务,并且仅与特定节点相关?

例如,考虑到node 2,列表应该是:

7, 5, 11, 2

5, 7, 11, 2

【问题讨论】:

  • 那么,你不关心节点的顺序吗?在这种情况下,您实际上并不需要拓扑排序。
  • 我不明白。需要输出所有节点还是只输出一部分?
  • @svick 不关心其他节点
  • @Толя 不关心其他节点
  • @svick:他确实关心节点的顺序,但7,55,7 的顺序是免费的。这两个必须在11 之前,11 必须在2 之前。该问题要求对输入节点的子集进行拓扑排序,从中可以访问2。对于此示例,恰好有两个可接受的输出。

标签: algorithm graph computer-science topological-sort


【解决方案1】:
  1. 反转边缘
  2. 2 开始运行 DFS
  3. 离开节点后,将其插入列表中。

例子:

Enter 2
  Enter 11
    Enter 7
    Leave 7, insert into list
    Enter 5
    Leave 5, insert into list
  Leave 11, insert into list
Done, insert 2 into list

Result: 7, 5, 11, 2

【讨论】:

    【解决方案2】:

    您必须将图分解为一个邻接矩阵,其中从节点 A 到节点 B 的每个链接都表示为一个矩阵中的“1”,其中节点对应于节点和列。

    从这一点开始,您需要做的就是从终端节点向后工作,识别指向它的节点,然后从每个节点向后工作。

    现在,您可能希望以广度优先的方式执行此操作,因此使用队列数据结构来跟踪“依赖”节点。

    【讨论】:

    • 我不认为这个答案的第一句话是正确的——拓扑排序(及其变体)不需要创建邻接矩阵。这可能是一种方法,但不是必要的步骤。
    • @HighPerformanceMark 尽管问题是这么说的,但拓扑排序实际上并不是问题所要求的。
    • 回答这个问题不需要构建邻接矩阵,尽管这可能是一个有用的步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多