【问题标题】:Weakly connected graph traversal from least number of nodes从最少节点数的弱连接图遍历
【发布时间】:2013-03-28 12:15:29
【问题描述】:

我得到了以下练习:有一个未加权、有向、弱连接的图,有 n 个节点(n

  • 我将图形存储在邻接列表中(对于二维矩阵,n 可能太高)
  • 我从每个节点 i 启动一个 BFS,并将它到达的节点存储在 x[i][...] (x = List<List<int>>) 中
  • 我检查是否有x[i].Count == n
  • 我检查是否有(x[i] union x[j]).Count == n
  • 我检查是否有(x[i] union x[j] union x[k]).Count == n ...因此,我将 x 的 2、3、4... 子集的所有可能并集,并检查其计数是否为 n。

如果 n 不太高,它可以正常工作,但我需要一个更有效的算法来获得更大的 n。

感谢您的帮助(您会让我再次入睡)! :)

【问题讨论】:

    标签: graph traversal


    【解决方案1】:

    找到没有任何传入边的节点。遍历这些节点,并且对于每个节点 v,开始遍历图。记住您访问了哪些节点(通过将它们放入哈希表或标记它们)。当您到达您已经访问过的节点时停止遍历。

    您需要一个邻接表表示,其中每个节点都有一个传入边列表和一个传出边列表。然后做这样的事情:

    Set nodesToVisit = emptySet;
    for i=1 to n:
        if incoming[i].size() == 0:
            nodesToVisit.add(i)
    
    Set visited = emptySet;
    for v in nodesToVisit:
        nodesToVisit.remove(v)
        if(v is not in visited):
            visit(v);
            visited.add(v);
            for u in outgoing[v]:
                nodesToVisit.add(u)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多