Balancing oriented graph

Viewed 43

I have a set of edges looking like this:

public class Edge<T>
{
    public T From { get; set; }
    public T To { get; set; }
}

Now I would like to check if my graph is balanced. Under "balanced" I mean that any vertex have equal count of incoming and outgoing edges. My current code is:

public static bool IsGraphBalanced<T>(List<Edge<T>> edges)
{
    var from = new Dictionary<T, int>);
    var to = new Dictionary<T, int>);

    foreach (var edge in edges)
    {
        if (!from.ContainsKey(edge.From))
            from.Add(edge.From, 0);

        if (!to.ContainsKey(edge.To))
            to.Add(edge.To, 0);

        from[edge.From] += 1;
        to[edge.To] += 1;
    }

    foreach (var kv in from)
    {
        if (!to.ContainsKey(kv.Key))
            return false;
        if (to[kv.Key] != kv.Value)
            return false;
    }
    // mirrored check with foreach on "to" dictionary

    return true;
}

Can I replace it with Linq?

P.S. Size of edges is under 100-150 items, so I care about a readability rather than performance

1 Answers
Related