0

Graph クラス (リストとマトリックスの両方の実装) を設計しています。などのメソッドを提供する必要がありますGetAdjacencies(int vertex)

最初の瞬間、私は戻ることを考えました。そうすれば、ステートメントIEnumerableを使用して結果を反復処理できるようになります。foreachしかし、次の瞬間、新しいリストが発生するたびに作成する必要があるため、これは恐ろしい解決策であることに気付きましたGetAdjacencies(int vertex)

次に を返すことを考えましたが、そうすると結果の usingステートメントEnumeratorを反復処理できません。foreachただし、効率ははるかに優れています (多くのグラフ アルゴリズムを実装する予定であり、最適化に非常に関心があります)。

C# でこれを行う正しい方法を教えてください。

4

1 に答える 1

1

メソッドが呼び出されるたびに新しいリストを作成する必要はありません。たとえば、反復子ブロックを使用します。

public IEnumerable<int> GetAdjacencies(int vertex)
{
    foreach (int i in adj[vertex])
        yield return i;
}

コードでグラフがどのように正確に表現されているかはわかりません。そのため、隣接リストの取得の詳細は異なる場合があります。

于 2013-11-09T22:23:12.370 に答える