本文将给出一个使用回溯法实现全排列的程序。
public class Permutations {
public void permute(String value, int startIndex, int endIndex) {
if (startIndex == endIndex) {
System.out.printf("%s\n", value);
} else {
for (int currIndex = startIndex; currIndex <= endIndex; currIndex++) {
value = swap(value, startIndex, currIndex);
permute(value, startIndex + 1, endIndex);
/** 回溯 */
value = swap(value, startIndex, currIndex);
}
}
}
private String swap(String value, int idxOne, int idxTwo) {
char[] charArray = value.toCharArray();
char temp = value.charAt(idxOne);
charArray[idxOne] = charArray[idxTwo];
charArray[idxTwo] = temp;
return new String(charArray);
}
}
测试程序如下:
public class Main {
public static void main(String[] args) {
String value = "ABCD";
new Permutations().permute(value, 0, value.length()-1);
}
}
运行结果:
ABCD
ABDC
ACBD
ACDB
ADCB
ADBC
BACD
BADC
BCAD
BCDA
BDCA
BDAC
CBAD
CBDA
CABD
CADB
CDAB
CDBA
DBCA
DBAC
DCBA
DCAB
DACB
DABC
分享到:
相关推荐
输出n的全排列,有两种方法: 1. 采用递归插入的方法,如果知道n-1的全排列,n的全排列为将数值n插入的n-1的全排列之间的空隙和两头共n个位置。 2. 采用递归标记填充的方法,查看标记数组,将未标记的数值依次填充...
使用递归 :-------------输入给出正整数n,输出1到n的全排列,排列的输出顺序为字典序,每种排列占一行,数字间无空格,
用回溯法递归实现的输出N的全排列 如 123 132 。。。。
输入N,输出1-N全排列c语言算法,非递归算法................
★问题描述: 如果一个长度为 n 序列包含 1 到n的每一个数字,那么我们说这个序列是一个长度...输出由空格隔开的满足要求的全排列,如果找不到满足的全排列则输出-1。 输入示例 输出示例 7 2 1 3 5 4 7 6 DUUDUD
全排列-非递归算法(适合动态的新元素加入重新输出全排列-本程序以1到6的数字输出为例)
输出n个整数的全排列 C++程序 数据结构 实验一
实现字符的全排列,C++ 源代码,如 输入a,b,c,就会输出全排列:aa,bb,cc,ab,ac,bc
输出有重复字符的全排列,C++源码......
有浙大的180多道习题适合基础复习 浙江大学远程教育学院 数据结构与算法练习题(客观题) 2007-2008学年秋学期
如:n=3 全排列的数字为 1 2 3 则输出 123 132 213 231 321 312 2、输入n和k(n》=k)求n个数字的(n,k)排列 如n=3,k=2 输入的三个数位1 2 3 则输出 12 13 21 23 31 32 3、输入n个数(有重复),求n个数字的...
主要介绍了python回溯法实现数组全排列输出,以实例形式较为详细的分析了全排列的定义及回溯法的实现技巧,需要的朋友可以参考下
使用Visual C++ 6.0开发,程序可以实现n个数的全排列的输出,比如对于1,2,3的全排列的输出为:123,132,213,231,312,321 程序采用递归的方式实现
输出自然数1到n的所有不重复的排列,即n的全排列。
简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。
全排列acc pascal程序加题解 全排列 Time Limit:20000MS Memory Limit:65536K Total Submit:506 Accepted:218 Description 列出所有数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现得复...
用C语言实现5个数的排列组合,可以随机生成合格数或者手动输入
CC++全排列..1--n的全排列以及字符串的全排列
输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。 【样例输入1】1 【样例输出1】1 【样例说明1】输入整数N=1,...
生成这些字符的不重复的全排列,并将结果打印到标准输出上。 【输入形式】 从标准输入上读入一个由字母、数字组成的字符串,字符串的长度小于100,其中包含重复的字符。 【输出形式】 向标准输出印...