我正在excel vba中构建一个算法来搜索网络中的路径。我是编程这些类型问题的新手。请不要建议备用软件。问题应该很简单。
问题描述: 搜索表示弧上流的数据集合(3“列”:from,to,flow) 识别路径(从源头开始,找到流向“to”,在“from”字段中查找“to”,找到到“to”的流程,依此类推,直到从源到另一个“from”找不到)每条路的尽头。
数据如下所示:
fromnode tonode flow
1 2 4
2 3 3
3 4 2
4 5 1
7 6 1
8 7 2
最大的障碍:
我正在使用Collection来保存这些数据,并使用下面的代码进行设置。
Dim y As Collection 设置y =新集合 y。添加表格(“FlowDecomp_Solve”)。范围(“fromtoflow”)。值
数据被拉入,但看起来像这样: (尝试过图片,但我是新用户)
第1项
项目1(1)
Item 1 (1,1) 1
Item 1 (1,2) 2
Item 1 (1,3) 4
因此它表明Collection有1个项目而不是我的弧形数量。如何访问集合的Item1(1,2)类型地址。每个特殊值是否都有唯一键?在代码中使用后,如何搜索我的集合并删除特定行?
非常感谢你提供任何帮助。
答案 0 :(得分: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的集合,直到它找不到另一个弧,然后我写出路径,清空集合,更新值,然后重新开始。
希望这有助于其他人...