2

我正在 excel vba 中构建一个算法来搜索网络中的路径。我是编写这类问题的新手。请不要推荐替代软件。问题应该很简单。

问题描述:搜索表示弧上流的数据集合(3“列”:从、到、流)识别路径(从源开始,找到流到“到”,在“从”字段中查找“到” ,找到流向那个“to”,依此类推,直到找不到另一个“from”)从源到每个路径的结尾。

数据如下所示:

从节点到节点流

1 2 4

2 3 3

3 4 2

4 5 1

7 6 1

8 7 2

最大的障碍:

我正在使用 Collection 来保存这些数据并使用下面的代码进行设置。

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 回答