Skip to content

CP-65208: Implementation of OutEdges(TVertex v) for BidirectionalGraph is (I think) wrong #156

@fubar-coder

Description

@fubar-coder

From unknown CodePlex user on Thursday, 01 September 2016 00:41:20

Here is the implementation for BidirectionalGraph :

        public IEnumerable<TEdge> OutEdges(TVertex v)
        {
            IEnumerable<TEdge> result;
            if (this.TryGetInEdges(v, out result))
                return result;
            else
                return Enumerable.Empty<TEdge>();
        }

I think it should not use the method "TryGetInEdges".

A symptom of this problem is that the algoritms have a weird behaviour. For exemple, is i have the following graph:

v1->v2
^    |
|    v
v4<-v3

and if I use the StronglyConnectedComponents algorithm on this graph, the algorithm will output that there is 4 components (we should have only one component). I think, this is because the StronglyConnectedComponents algorithm use the OutEdges method, and since it is wrong, the algorithm actually see the following graph:

|-----|   |-----|   |-----|    |-----|
v1<---|   v2<---|   v3<---|    v4<---|

(each vertex has a self-loop, and there is no other edge excepts these loops)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions