3
我有一组边缘看起来像这样的:平衡有向图
3210现在我想检查我的图是平衡的。在“平衡”下,我的意思是说任何顶点都有相等数量的输入和输出边缘。我目前的代码是:
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;
}
我可以用Linq替换吗?
P.S.的edges
尺寸是100-150下的项目,所以我在乎的可读性,而不是性能
在这种情况下查询你的顶点不是更容易吗?假设你有一个顶点对象,你可以创建一个方法返回edgesFromCount/edgesToCount – hellyale
@hellyale我的顶点是一个'T'列表。我如何从这个列表中获得'edgesFromCount'? –
你确定检查'if(to.ContainsKey(kv.Key))'是否正确?看起来应该是'if(!...)' –