`
MouseLearnJava
  • 浏览: 460389 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

本文将给出一个使用回溯法实现全排列的程序。


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
0
0
分享到:
评论

相关推荐

    n全排列输出

    输出n的全排列,有两种方法: 1. 采用递归插入的方法,如果知道n-1的全排列,n的全排列为将数值n插入的n-1的全排列之间的空隙和两头共n个位置。 2. 采用递归标记填充的方法,查看标记数组,将未标记的数值依次填充...

    编写程序输出前n个正整数的字典序全排列

    使用递归 :-------------输入给出正整数n,输出1到n的全排列,排列的输出顺序为字典序,每种排列占一行,数字间无空格,

    java递归实现N个数全排列输出

    用回溯法递归实现的输出N的全排列 如 123 132 。。。。

    N个数全排列c语言算法

    输入N,输出1-N全排列c语言算法,非递归算法................

    构造全排列问题

    ★问题描述: 如果一个长度为 n 序列包含 1 到n的每一个数字,那么我们说这个序列是一个长度...输出由空格隔开的满足要求的全排列,如果找不到满足的全排列则输出-1。 输入示例 输出示例 7 2 1 3 5 4 7 6 DUUDUD

    全排列-非递归算法

    全排列-非递归算法(适合动态的新元素加入重新输出全排列-本程序以1到6的数字输出为例)

    输出n个整数的全排列

    输出n个整数的全排列 C++程序 数据结构 实验一

    qpl.rar_CC_全排列_输入全排列

    实现字符的全排列,C++ 源代码,如 输入a,b,c,就会输出全排列:aa,bb,cc,ab,ac,bc

    输出有重复字符的全排列

    输出有重复字符的全排列,C++源码......

    数据结构习题集(有答案)

    有浙大的180多道习题适合基础复习 浙江大学远程教育学院 数据结构与算法练习题(客观题) 2007-2008学年秋学期

    输出n个数字的全排列(可重复)

    如: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回溯法实现数组全排列输出实例分析

    主要介绍了python回溯法实现数组全排列输出,以实例形式较为详细的分析了全排列的定义及回溯法的实现技巧,需要的朋友可以参考下

    全排列(阶乘)输出程序

    使用Visual C++ 6.0开发,程序可以实现n个数的全排列的输出,比如对于1,2,3的全排列的输出为:123,132,213,231,312,321 程序采用递归的方式实现

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    输出自然数1到n的所有不重复的排列,即n的全排列。

    输出n个字符的全排列(没有重复字符)

    简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。

    全排列acc pascal程序加题解 全排列

    全排列acc pascal程序加题解 全排列 Time Limit:20000MS Memory Limit:65536K Total Submit:506 Accepted:218 Description 列出所有数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现得复...

    五个数的全排列

    用C语言实现5个数的排列组合,可以随机生成合格数或者手动输入

    CC++全排列..1--n的全排列以及字符串的全排列

    CC++全排列..1--n的全排列以及字符串的全排列

    全排列数生成

    输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。 【样例输入1】1 【样例输出1】1 【样例说明1】输入整数N=1,...

    C语言重复数全排列的代码

    生成这些字符的不重复的全排列,并将结果打印到标准输出上。 【输入形式】 从标准输入上读入一个由字母、数字组成的字符串,字符串的长度小于100,其中包含重复的字符。 【输出形式】 向标准输出印...

Global site tag (gtag.js) - Google Analytics