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 ++高效地在邻接列表中存储大图?
下一篇: 它可以交叉边缘吗?
