2

ネットワーク内のパスを検索するために、excelvbaでアルゴリズムを構築しています。私はこれらのタイプの問題をプログラミングするのは初めてです。代替ソフトウェアを提案しないでください。問題は非常に単純なはずです。

問題の説明:アーク上のフローを表すデータのコレクションを検索します(3つの「列」:from、to、flow)パスを特定します(ソースから開始し、「to」へのフローを見つけ、「from」フィールドでその「to」を検索します) 、その「to」へのフローを見つけ、以下同様に、各パスのソースから最後までの別の「from」が見つからなくなるまで続けます。

データは次のようになります。

ノードからノードへのフロー

1 2 4

2 3 3

3 4 2

4 5 1

7 6 1

8 7 2

最大のハードル:

コレクションを使用してこのデータを保持し、以下のコードで設定しています。

Dim y As Collection Set y = New Collection y.Add Sheets( "FlowDecomp_Solve")。Range( "fromtoflow")。Value

データは取り込まれますが、次のようになります:(写真を試しましたが、私は新しいユーザーです)

アイテム1

項目1(1)

  Item 1 (1,1)   1

  Item 1 (1,2)   2

  Item 1 (1,3)   4

つまり、コレクションには私のアークの数ではなく1つのアイテムがあることを示しています。コレクションのItem1(1,2)タイプのアドレスにアクセスするにはどうすればよいですか。それぞれの特別な値には一意のキーがありますか?コレクションを検索して、コードで使用した後で特定の行を削除するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

0

多くの試行錯誤の後、元のデータを配列にして、次のように検索することにしました (d は配列の下、a は横):

For d = LBound(arcflow(), 1) To UBound(arcflow(), 1)
    For a = LBound(arcflow(), 2) To UBound(arcflow(), 2)
        If a = 1 Then
        fromnode = arcflow(d, a)
        ElseIf a = 2 Then
        tonode = arcflow(d, a)
        ElseIf a = 3 Then
        flow = arcflow(d, a)
        'write into node-node matrix
        Sheets("FlowDecomp_Solve").Range("nodenodemtrx").Cells(fromnode, tonode).value = 1
        End If
    Next a
Next d

次に、パスをトレースするために、別のアークが見つからなくなるまで from ノードと to ノードを Path というコレクションに追加し、パスを書き出し、コレクションを空にし、値を更新して、最初からやり直します。

これが他の誰かに役立つことを願っています...

于 2012-12-02T23:55:12.803 に答える