回溯算法_组合问题

Public path As New Collection
Public cnt As Long
Public res_ar() As Variant

Sub 回溯算法_组合问题()
    cnt = 0
    Call combine(9, 2)
    With Sheet6
        .Cells.ClearContents
        .Range("a1").Resize(UBound(res_ar)) = Application.Transpose(res_ar)
    End With
End Sub

Sub combine(n, k)
    Call combineHelper(n, k, 1)
End Sub

Private Sub combineHelper(n, k, startIndex)
    If path.count = k Then
        Call outRes(path)
        Exit Sub
    End If
    For i = startIndex To n - (k - path.count) + 1
        path.Add (i)
        Call combineHelper(n, k, i + 1)
        path.Remove (path.count)
    Next
End Sub

Sub outRes(path)
    cnt = cnt + 1
    ReDim Preserve res_ar(1 To cnt)
    For x = 1 To path.count
        tem = tem & path(x)
    Next
    res_ar(cnt) = tem
End Sub

 

posted @ 2022-12-08 14:29  依云科技  阅读(24)  评论(0)    收藏  举报