vb排列组合算法
(2010-07-08 20:56:20)
标签:
vb排列组合算法源码it |
分类: 开发 |
这是一个类模块的代码
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
Option
'
'
'产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步
'的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的
'
'排列:就是从n个元素中同时取r个元素的排列,记做P(n,m)。(当m=n时,
'我们称P(n,n)=n!为全排列)
'
'{1,2,3};
'
'
'{4,1,2};
Private
Private
Private
Private
Private
Private
'排列组合
Public