can it have cross edges?
Is it possible in an undirected graph for an edge that is leasing to an already visited node to lead towards a vertice that is not an ascendant of the current node?
To be more clear, I want to implement a depth-first search on an undirected graph. If I come across an edge that connects my current vertice with an already-visited one, am I guaranteed to have a path from one to another by iterating through the parent array?
The most natural answer seems to be affirmative. I have yet to find a counter-example. What do you think?
In DFS terminology:
Can an edge be a cross-edge in DFS - an edge that leads to an already discovered node, which is not an ancestor of the origin, in an undirected graph?
An edge discovered by DFS cannot be a cross edge, if its destination is an already discovered node, it must be a back-edge - so it is leading to an ancestor (in the DFS tree) of the source node.
Proof:
Assume it was not the case, and while in some node v
you encounter an already discovered node ( u
) that is not one of your 'parents' (in the DFS tree).
Since you discovered the node, there is an edge (v,u)
.
But the graph is undirected, so the edge is symetrical.
Since u
was already discovered, you have these options:
u
was discovered and not "closed" yet, in this case, you are basically traversing a subtree which has u
as a root, and u
is indeed a parent of v
. u
was discovered and closed already. But that's impossible considering you just discovered v
, and there is an edge (u,v)
. Thus an edge that leads to an already discovered edge in an undirected graph, must be a back edge, and cannot be a cross-edge.
链接地址: http://www.djcxy.com/p/52382.html上一篇: C ++高效地在邻接列表中存储大图?
下一篇: 它可以交叉边缘吗?