笔者曾写过利用递归实现不重复序列全排列的例子http://blog.csdn.net/northwolves/archive/2004/04/07/19590.aspx
现在给出另一个利用进制实现的代码:
Sub pailie1(ParamArray x())
Dim starttime As Single, endtime As Single
Dim n As Integer, i As Long, Num As Integer, j As Integer
Dim temp1() As String, temp2 As Long, all As New Collection
n = UBound(x) + 1 '元素个数
starttime = Timer '开始计时
ReDim temp1(1 To n)
For i = 0 To n ^ n - 1
temp2 = i
Set all = Nothing
On Error Resume Next
For j = n To 1 Step -1
temp1(j) = x(temp2 Mod n) '转换为n进制
all.Add temp1(j), temp1(j) '防止某一元素重复列出
temp2 = temp2 \ n
Next
If all.Count = n Then
Debug.Print Join(temp1, " ") '输出
Num = Num + 1
End If
? DoEvents
Next
endtime = Timer
Debug.Print "共 " & Num & " 种排列!用时 " & endtime - starttime & " 秒!"
End Sub
Private Sub Command1_Click()
pailie1 "a", "b", "c", "d", "e", "f", "g"
End Sub
分享到:
相关推荐
全排列算法有两个比较常见的实现:递归排列和字典序排列。 (1)递归实现 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递归处理,从而得到所有元素的全排列。 (2)字典...
单链表逆序 用了两个指针变量。 非递归实现。
(一)非递归全排列算法基本思想是: 1.找到所有排列中最小的一个排列P. 2.找到刚刚好比P大比其它都小的排列Q, 3.循环执行第二步,直到找到一个最大的排列,算法结束.下面用数学的方法描述:给定已知序列 P = A1A2A3...
银行家算法非递归得到所有安全序列,操作系统,emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
深度搜索+递归实现银行家算法安全序列全搜索算法实现代码.doc
因为有重复元素,想要序列不重复:(1)需要保证序列头元素与其余元素一次交换前后的序列头元素不相同,即除与自身交换外,两个相同元素不交换;(2)多次交换中不与同一元素进行第二次交换;上述条件保证了头元素与其余...
考虑[2,3,5,4,1]这个序列,从后往前寻找第一对递增的相邻数字,即3,5。那么3就是替换数,3所在的位置是替换点。 将3和替换点后面比3大的最小数交换,这里是4,得到[2,4,5,3,1]。然后再交换替换点后面的第一个数...
有测试结果 (一) 从键盘输入二叉树的扩展先序遍历序列,建立二叉树的二叉链表存储结构; (二) 分别用递归和非递归算法实现二叉树的三种遍历;
输出自然数1到n的所有不重复的排列,即n的全排列。
编写先序遍历二叉树的非递归算法程序,要求: (1)以二叉链表建立二叉树。 (2)输出遍历的结点序列。 (3)有实例验算。
二叉树先序、中序、后序三种遍历的非递归算法
输入先序遍历和中序遍历序列,建立二叉树的二叉链表 (非递归算法) 自己写的程序呐,调试运行过,绝对能用哒~~!
c++实现的关于递归实现逆序字符串,有需要的可以下载
二叉树先序、中序、后序遍历非递归算法,简述了二叉树的基本算法。
小小学习,C语言数据结构,中序遍历二叉树非递归算法
大学数据结构实验作业先序后序中序递归和非递归的遍历算法及代码
c++实现用回溯思想求一个序列的全排列,如输入为{1,2,3},输出{1,2,3},{1,3,2,},{2,1,3},{2,3,1},{3,1,2},{3,2,1}
本程序采用非递归方法实现对二叉树的先序、中序、后序遍历.自定义栈和树的结构。
利用换位法求小于9的所有全排列序列
一种基于非递归的序列图逆向生成算法,崔伟勇,陈平,在逆向工程领域中,逆向生成的序列图有助于用户理解软件系统的动态特征。逆向生成序列图时往往要处理大量的动态信息,所以序列图