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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions