给定一个图G = (V, E)
,使用 DFS,我如何用它参与的简单循环数标记每条边?当我从图中提取强连通分量时,我已经用后序标记了节点,所以也许我可以以某种方式使用该信息。
private Integer labelEdges(Node currentNode, Set<Node> component) {
Integer numLoops = 0;
currentNode.onStack = true;
for (Edge outEdge : currentNode.getEdges()) {
Node nextNode = outEdge.getEnd();
if (component.contains(nextNode)) {
if (nextNode.onStack) {
// loop
numLoops += 1;
}
else {
numLoops += labelEdges(nextNode, component);
}
outEdge.cycles = numLoops;
}
}
currentNode.onStack = false;
return numLoops;
}
我似乎无法清楚地解释这一点。谁能指出我正确的方向?