显示每个排列的算法(尤其是对于 c++)

Posted

技术标签:

【中文标题】显示每个排列的算法(尤其是对于 c++)【英文标题】:Algorithm (especially for c++) to show Every Permutation 【发布时间】:2018-09-28 14:43:26 【问题描述】:

我需要制作一个使用 recursion 和循环的程序来显示 每个排列。 假设输入是“abc” 输出:

a
ab
abc
ac
acb
b
ba
bac
bc
bca
c
cb
cba
ca
cab

但我仍然可以显示(abc、acb、bac、bca、cab、cba) 任何人都可以提出任何算法。 (C++ 优先)

【问题讨论】:

分享你目前得到的,我的意思是代码,然后我们可以帮助你。 “a”不是“abc”的排列 C++ 标准库有next_permutation。这符合你的要求吗? @PaulFloyd。我需要做出所有可能的输出。 next_permutation 会给abc, acb, bac, bca, cab, cba 但是怎么能得到别人 @Black_Raven。我的代码正在显示abc, acb, bac, bca, cab, cba 【参考方案1】:

您想要输入的幂集的每个成员的所有排列。

permSub("abc", "")

func permSub(input, perm)
  print perm
  if input = "" return

  for i = 0 to input.length-1
    permSub(input[0..i]+input[i+1..input.length), perm+input[i]
  end
end

其中input[i..j]代表inputi(inclusive)j(exclusive)的子字符串,+是字符串拼接。

请注意,这将包括空集,严格来说是正确的,但您没有包括它。

这是原始的 Java 实现和我的 conversion 到 C++,你不应该相信 :)

【讨论】:

这是伪代码。我添加了一个指向 Java 实现的链接。

以上是关于显示每个排列的算法(尤其是对于 c++)的主要内容,如果未能解决你的问题,请参考以下文章

组合和排列算法(递归)

c++编程 全排列

查询显示 2010 年每个月的总利润降序排列?

字典序法生成全排列算法图

Qt ListView 不显示 C++ 模型内容

哈密 顿路径算法时间复杂度