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(!...)' –