显示每个排列的算法(尤其是对于 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]
代表input
从i(inclusive)
到j(exclusive)
的子字符串,+
是字符串拼接。
请注意,这将包括空集,严格来说是正确的,但您没有包括它。
这是原始的 Java 实现和我的 conversion 到 C++,你不应该相信 :)
【讨论】:
这是伪代码。我添加了一个指向 Java 实现的链接。以上是关于显示每个排列的算法(尤其是对于 c++)的主要内容,如果未能解决你的问题,请参考以下文章