Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 图分支分解_Graph - Fatal编程技术网

Graph 图分支分解

Graph 图分支分解,graph,Graph,你好, 我想知道一种算法,可以通过以下方式将图分解为具有秩的分支: Rank | path (or tree branch) 0 1-2 1 2-3-4-5-6 1 2-7 2 7-8 2 7-9 节点1将是根节点,节点6、8和9将是结束节点。 分支的秩应该由分支节点到根节点的数目给出。让我们假设图没有循环(但我不希望有这样的约束) 我是电气工程师,也许这是一个非常标准的问题,但到目前为止,我只找到了BFS算法来获得路径,以及所有的割集。我也不

你好,

我想知道一种算法,可以通过以下方式将图分解为具有秩的分支:

Rank | path (or tree branch)
0      1-2
1      2-3-4-5-6
1      2-7
2      7-8
2      7-9
节点1将是根节点,节点6、8和9将是结束节点。 分支的秩应该由分支节点到根节点的数目给出。让我们假设图没有循环(但我不希望有这样的约束)

我是电气工程师,也许这是一个非常标准的问题,但到目前为止,我只找到了BFS算法来获得路径,以及所有的割集。我也不知道是否适用

我希望我的问题足够清楚


PS:这个问题应该在堆栈溢出中吗?

根据您的示例,我做了一些假设:

  • 每当节点的阶数大于2时,都要进行分叉
  • 您的输入图是非循环的
通过增强BFS,可以从根
r
执行此操作。下面将生成
组件组
,这将是组件列表(每个组件都是其成员顶点的列表)。每个组件的排名将位于列表中相同的索引下
rank

comp[1..n] = -1           // init all vertices to belong to no components
comp[r] = 0               // r is part of component 0
comp_groups = [[r]]       // a list of lists, with the start of component 0
rank[0] = 0               // component 0 (contains root) has rank 0 
next_comp_id = 1

queue = {r}               // queues for BFS
next_queue = {}

while !queue.empty()
  for v in queue
     for u in neighbors(v)
        if comp[u] == -1                       // test if u is unvisited
          if degree(v) > 2
            comp[u] = next_comp_id             // start a new component
            next_comp_id += 1
            rank[comp[u]] = rank[comp[v]] + 1  // new comp's rank is +1
            comp_groups[comp[u]] += [v]        // add v to the new component
          else
            comp[u] = comp[v]                  // use same component
          comp_group[comp[u]] += [u]           // add u to the component
          next_queue += {u}                    // add u to next frontier
  queue = next_queue                     // move on to next frontier
  next_queue = {}

我也想过使用一些BFS,但我不知道是否有更好的。还有一件事它是哪种语言?DFS也可能使用,但如果需要,BFS将更易于并行化。不是任何特定的语言,只是伪代码。