0

グラフを作成し、を使用して追加する頂点の一意性を確認していHashSet<T>ます。アイテムがまだ追加されていない場合、そのメソッドAdd()はtrueを返します。

エッジにはどのようなテクニックを使用できますか?ペアABまたはペアBAペアのいずれかが一度追加されたことを確認する必要があります。

これが私が使用しているデータの軽量バージョンです:

interface INode
{
    INode[] Previous { get; }

    Node Next { get; }
}

で、〜がある:

INode current;
INode[] allPrevious = ExternalMethod1(current);
INode[] allNext = ExternalMethod2(current);

そのため、再帰的に巡回している間はグラフを作成できません。すべてのデータを保存して、繰り返し処理します。

4

1 に答える 1

2

エッジ用に独自の等式比較器の実装を作成HashSet<T>.Comparerし、そのインスタンスに設定します。例えば:

class Edge
{
    public string From { get; set; }
    public string To { get; set; }
}

class EdgeEqualityComparer : IEqualityComparer<Edge>
{
    public bool Equals(Edge lhs, Edge rhs)
    {
        return (lhs.From.Equals(rhs.From) && lhs.To.Equals(rhs.To)) ||
               (lhs.From.Equals(rhs.To) && lhs.To.Equals(rhs.From));
    }

    public int GetHashCode(Edge e)
    {
        return e.From.GetHashCode() ^ e.To.GetHashCode();
    }
}

もちろん、ヌル性もチェックする必要があります。すべての標準的な警告GetHashCodeは、実装にも適用されます。

于 2012-06-21T08:02:43.427 に答える