作业帮 > 综合 > 作业

求输出一组任意数的全排列组合结果,可以使用EXCEL,C,VB.等工具,给出完整算法,给出工具则更好,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/08 12:00:58
求输出一组任意数的全排列组合结果,可以使用EXCEL,C,VB.等工具,给出完整算法,给出工具则更好,
vb 排列组合算法
这是一个类模块的代码
Option Explicit
' 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先
' 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中
'产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步
'的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的 状态节点).
' 需掌握的基本算法:
'排列:就是从n个元素中同时取r个元素的排列,记做P(n,m).(当m=n时,
'我们称P(n,n)=n!为全排列) 例如我们有集合OR = {1,2,3,4},那么
' n = |OR| = 4, 且规定r=3, 那么P(4,3)就是:
'{1,2,3}; {1,2,4}; {1,3,2}; {1,3,4}; {1,4,2}; {1,4,3};
' {2,1,3}; {2,1,4}; {2,3,1}; {2,3,4}; {2,4,1}; {2,4,3};
' {3,1,2}; {3,1,4}; {3,2,1}; {3,2,4}; {3,4,1}; {3,4,2};
'{4,1,2}; {4,1,3}; {4,2,1}; {4,2,3}; {4,3,1}; {4,3,2}
Private n As Integer, m As Integer
Private pNum As Integer
Private used() As Integer
Private p() As String
Private Data As Variant
Private PData As Variant
'排列组合
Public Sub Permute(vData As Variant, iPm As Integer, vPData As Variant)
Data = vData
n = UBound(vData) - LBound(vData) + 1
If iPm n Then
m = n
End If
Cnm = Pnm(n, m) / Pnm(m, m)

End Function

Dim a As New Class1
Dim v1(2) As Integer
Dim v2
v1(0) = 1: v1(1) = 2: v1(2) = 3
a.Permute v1, 3, v2

v2为二维数组,V2(5,2)