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时,都要进行分叉
- 您的输入图是非循环的
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将更易于并行化。不是任何特定的语言,只是伪代码。