`
ihuashao
  • 浏览: 4720880 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

回溯实现数组元素的排列组合

阅读更多

参考http://blog.csdn.net/northwolves/archive/2007/08/29/1764177.aspx中的代码,将字符串数组x取n个元素进行排列组合:


Sub getall(ByRef x() As String, ByVal n As Byte, Optional types As Byte = 0)
Dim m As Long, num As Long, i As Integer, j As Integer, min As Integer, k As Integer, a(), b() As String, s() As String
ReDim a(1 To n)
ReDim b(1 To n)
m = UBound(x) - LBound(x) + 1
min = LBound(x) - 1
k = 1
If m < n Then Exit Sub
Do
a(k) = a(k) + 1
If a(k) > m Then
k = k - 1
Else
For i = 1 To k - 1
If a(k) = a(i) Then Exit For
Next
If i = k Then
If k = n Then
For j = 1 To n
b(j) = x(min + a(j))
Next
num = num + 1
ReDim Preserve s(1 To num)
s(num) = Join(b, ",")
End If
If k < n Then k = k + 1: a(k) = a(k - 1) * types

End If
End If
Loop Until k = 0
Debug.Print Join(s, vbTab)
End Sub

Sub getit()
Dim x() As String
x = Split("a b c d e f g")
getall x, 4, 1 '组合
Debug.Print
getall x, 3 '排列
End Sub

返回:

a,b,c,d a,b,c,e a,b,c,f a,b,c,g a,b,d,e a,b,d,f a,b,d,g a,b,e,f a,b,e,g a,b,f,g a,c,d,e a,c,d,f a,c,d,g a,c,e,f a,c,e,g a,c,f,g a,d,e,f a,d,e,g a,d,f,g a,e,f,g b,c,d,e b,c,d,f b,c,d,g b,c,e,f b,c,e,g b,c,f,g b,d,e,f b,d,e,g b,d,f,g b,e,f,g c,d,e,f c,d,e,g c,d,f,g c,e,f,g d,e,f,g

a,b,c a,b,d a,b,e a,b,f a,b,g a,c,b a,c,d a,c,e a,c,f a,c,g a,d,b a,d,c a,d,e a,d,f a,d,g a,e,b a,e,c a,e,d a,e,f a,e,g a,f,b a,f,c a,f,d a,f,e a,f,g a,g,b a,g,c a,g,d a,g,e a,g,f b,a,c b,a,d b,a,e b,a,f b,a,g b,c,a b,c,d b,c,e b,c,f b,c,g b,d,a b,d,c b,d,e b,d,f b,d,g b,e,a b,e,c b,e,d b,e,f b,e,g b,f,a b,f,c b,f,d b,f,e b,f,g b,g,a b,g,c b,g,d b,g,e b,g,f c,a,b c,a,d c,a,e c,a,f c,a,g c,b,a c,b,d c,b,e c,b,f c,b,g c,d,a c,d,b c,d,e c,d,f c,d,g c,e,a c,e,b c,e,d c,e,f c,e,g c,f,a c,f,b c,f,d c,f,e c,f,g c,g,a c,g,b c,g,d c,g,e c,g,f d,a,b d,a,c d,a,e d,a,f d,a,g d,b,a d,b,c d,b,e d,b,f d,b,g d,c,a d,c,b d,c,e d,c,f d,c,g d,e,a d,e,b d,e,c d,e,f d,e,g d,f,a d,f,b d,f,c d,f,e d,f,g d,g,a d,g,b d,g,c d,g,e d,g,f e,a,b e,a,c e,a,d e,a,f e,a,g e,b,a e,b,c e,b,d
e,b,f e,b,g e,c,a e,c,b e,c,d e,c,f e,c,g e,d,a e,d,b e,d,c e,d,f e,d,g e,f,a e,f,b e,f,c e,f,d e,f,g e,g,a e,g,b e,g,c e,g,d e,g,f f,a,b f,a,c f,a,d f,a,e f,a,g f,b,a f,b,c f,b,d f,b,e f,b,g f,c,a f,c,b f,c,d f,c,e f,c,g f,d,a f,d,b f,d,c f,d,e f,d,g f,e,a f,e,b f,e,c f,e,d f,e,g f,g,a f,g,b f,g,c f,g,d f,g,e g,a,b g,a,c g,a,d g,a,e g,a,f g,b,a g,b,c g,b,d g,b,e g,b,f g,c,a g,c,b g,c,d g,c,e g,c,f g,d,a g,d,b g,d,c g,d,e g,d,f g,e,a g,e,b g,e,c g,e,d g,e,f g,f,a g,f,b g,f,c g,f,d g,f,e

分享到:
评论

相关推荐

    从n个数组中取出所有排列组合(Java实现)

    总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...

    JS实现二维数组元素的排列组合运算简单示例

    在JavaScript中实现二维数组元素的排列组合,有助于理解和掌握数组操作、递归、回溯等编程技巧。 在具体实现上,需要了解如何通过JavaScript代码遍历二维数组中的所有元素,并对这些元素进行排列组合运算。通常,这...

    PHP实现多种类型的排列组合算法

    在编程领域,排列组合算法是解决许多问题的关键,特别是在数据处理、数据分析以及各种优化问题中。PHP作为一种流行的服务器端脚本语言,虽然不是为高性能计算而设计,但其丰富的库和简洁的语法使得实现这些算法变得...

    quanpailie.rar_数组排列组合

    本程序"quanpailie.rar_数组排列组合"的目标是实现一个全排列算法,它能生成给定数字串的所有可能排列。 全排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能组合。在本例中,"全排列...

    Java实现字符数组全排列的方法

    全排列是指从给定的字符数组中,按照一定的顺序生成所有可能的排列组合。这个问题通常使用回溯法来解决,因为它能够有效地避免重复的排列。下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要...

    php求数组全排列,元素所有组合的方法

    在PHP中,数组全排列是指将数组中的所有...这种方法不仅可以应用于数组元素的全排列,还可以拓展到其他需要生成所有可能组合的场景,例如密码生成、数据筛选等。理解这种算法有助于提高处理复杂数据结构时的编程能力。

    java从n个数组中取出所有的组合

    在Java编程中,"从n个数组中取出所有的组合"是一个经典的算法问题,涉及到排列组合的概念。这通常可以通过回溯法或递归策略来解决。下面我们将深入探讨这个主题。 首先,我们需要理解“排列”与“组合”的概念。...

    Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例

    它通过将每个数组的长度相乘得到结果,因为笛卡尔积的结果是各个数组元素的乘积。 2. `handle`:这是一个递归方法,负责处理输出下标的递增。当一个数组的下标超出其长度时,它会回溯到上一个数组并重置其下标。...

    php求数组全排列,元素所有组合的方法总结

    总之,通过理解并应用这段代码,开发者可以有效地在PHP中实现数组的全排列,这对于解决涉及排列组合的问题是非常有用的。在实际编程中,还可以考虑优化这个算法,例如使用递归方法或者使用PHP内置的`array_...

    Java排列组合算法分析和代码实现

    在编程领域,排列组合是算法设计中的重要组成部分,特别是在数据结构和算法的课程中,以及在解决实际问题如路径搜索、图论问题等时经常用到。本资源深入讲解了如何在Java中实现这两种基本算法。 首先,让我们来理解...

    利用栈实现数的排列组合

    在编程领域,数组的排列组合是一个常见的问题,特别是在算法设计和数据结构的学习中。栈(Stack)作为一种常用的数据结构,其“后进先出”(LIFO)的特性使其在解决此类问题时尤为有效。本篇文章将深入探讨如何利用...

    实现了排列组合算法的类(JAVA).rar

    这个"实现了排列组合算法的类(JAVA).rar"文件提供了一种高效的JAVA实现,可以处理任意类型数组的排列和组合。下面将详细讨论排列组合的基本概念,以及在JAVA中实现这些算法的关键点。 排列是指从n个不同元素中...

    C#排列组合类

    - C#实现排列组合通常采用递归或回溯法。递归是将问题分解为更小的子问题,直到子问题可以直接解决;回溯则是在遇到错误时撤销最近的选择,尝试其他可能的路径。 3. **排列实现**: - 可以通过一个数组表示当前...

    基于c语言的排列组合算法

    在这个“基于C语言的排列组合算法”中,我们将深入探讨这两个概念以及如何使用C语言来实现它们。 排列是有限集合中的元素的一种有顺序的排列方式。在C语言中,我们可以使用递归方法来实现排列算法。首先,我们需要...

    python回溯法实现数组全排列输出实例分析

    全排列是指从n个不同元素中取出m个元素的所有可能的排列组合,其中m可以等于或小于n。当m等于n时,我们称之为“全排列”。换言之,全排列是从n个不同元素中取出n个元素的所有可能的序列。 文章中通过一个Python函数...

    排列组合迭代

    2. **组合实现**:可能实现了组合的生成,可能包括固定一个元素后递归处理其他元素的方法。 3. **图遍历**:可能有DFS或BFS的实现,用于展示如何在图中应用迭代策略。 4. **测试用例**:为了验证算法的正确性,可能...

    排列组合的算法作业 java

    总结来说,这两段Java代码展示了如何用回溯法解决排列组合问题。对于有重复元素的排列,需要额外的逻辑来避免重复;而对于无重复元素的排列,可以直接进行全排列的生成。理解这些算法对于提升编程技能和解决实际问题...

    排列组合

    在Objective-C中实现排列组合,我们可以利用递归或者回溯法。递归是一种自上而下的解决问题的方法,而回溯法则是在尝试解决问题的过程中,遇到死胡同时返回上一步,重新选择其他路径继续尝试。 对于题目中第一个...

    排列组合生成算法

    下面将详细探讨排列组合生成算法的基本原理、实现方法以及在VC++6.0环境下如何进行编程。 排列是将一组元素中的每个元素按顺序排列的所有可能方式,而组合则是不考虑顺序的选择。排列组合生成算法通常基于递归或...

    易语言数字排列组合学习源码

    在本资源中,我们关注的是"易语言数字排列组合学习源码",这是一个使用易语言实现的程序,用于计算并展示1到5所有可能的排列组合。这对于我们理解排列组合的概念以及易语言的编程技巧提供了很好的学习材料。 排列是...

Global site tag (gtag.js) - Google Analytics