package com.sitinspring;
/** *//**
* 全排列算法示例如果用P表示n个元素的排列,而Pi表示不包含元素i的排列,(i)Pi表示在排列Pi前加上前缀i的排列,那么,n个元素的排列可递归定义为:
* 如果n=1,则排列P只有一个元素i如果n>1,则排列P由排列(i)Pi构成(i=1、2、.、n-1)。根据定义,容易看出如果已经生成了k-1个元素的排列,那么,
* k个元素的排列可以在每个k-1个元素的排列Pi前添加元素i而生成。例如2个元素的排列是1 2和2 1,对3个元素而言,p1是2 3和3 2,在每个排列
* 前加上1即生成1 2 3和1 3 2两个新排列,p2和p3则是1 3、3 1和1 2、2 1,按同样方法可生成新排列2 1 3、2 3 1和3 1 2、3 2 1。
*/
public class Permutation<T>{
public static void main(String[] args){
String[] arr={"1","2","3"};
Permutation<String> a=new Permutation<String>();
a.permutation(arr,0,arr.length);
}
public void permutation(T[] arr,int start,int end){
if(start<end+1){
permutation(arr,start+1,end);
for(int i=start+1;i<end;i++){
T temp;
temp=arr[start];
arr[start]=arr[i];
arr[i]=temp;
permutation(arr,start+1,end);
temp=arr[i];
arr[i]=arr[start];
arr[start]=temp;
}
}else{
for(int i=0;i<end;i++){
System.out.print(arr[i]);
}
System.out.print("\n");
}
}
}
六个数1、2、2、3、4、5,4不能排第三位,3和5不能相邻,给出所有满足要求的全排列。
import java.util.ArrayList;
import java.util.List;
public class GetAll {
List list = new ArrayList();
public GetAll() {
list.add("22");
}
public void AllOrder(String str) {
List listlin = new ArrayList();
for (int i = 0; i < list.size(); i++) {
String nstr = (String) list.get(i);
nstr = str + nstr;
String cmpstr = nstr;
listlin.add(nstr);
nstr = ChangeStr(nstr);
while (!cmpstr.equals(nstr)) {
listlin.add(nstr);
nstr = ChangeStr(nstr);
}
}
list.clear();
list.addAll(listlin);
}
public void OutAll() {
//过虑
for (int j = 0; j < list.size(); j++) {
String outstr = (String) list.get(j);
if ((outstr.indexOf("3") + 1 == outstr.indexOf("5"))
|| (outstr.indexOf("3") - 1 == outstr.indexOf("5"))
|| (outstr.indexOf("4") == 2))
continue;
System.out.println("-----------" + outstr);
}
}
public String ChangeStr(String str) {
char arr[] = str.toCharArray();
char first = arr[0];
str = str.substring(1, str.length()) + first;
return str;
}
public static void main(String args[]) {
GetAll getall = new GetAll();
getall.AllOrder("1");
getall.AllOrder("3");
getall.AllOrder("4");
getall.AllOrder("5");
getall.OutAll();
}
}
分享到:
相关推荐
自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,
全排列算法
基于全排列算法的完整代码解析,可供理解搜索的技巧,有很高的使用价值
全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。
全排列算法详细解析(完整版)
使用递归实现的全排列算法,输出所有的全排列。 各种主流程序设计语言实现!
全排列算法 实例 一种实现了n个数全排列的算法 全排列算法 实例 一种实现了n个数全排列的算法
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
实现了字典序法、递增进位制数法、递减进位制数法、邻位对换法四种全排列算法。全排列算法有很多种,这里只是其中的一些,可以调试运行比较一下各种算法的效率。(该代码为初级版本,注重算法的实现,在交互方面需要...
利用中介数实现全排列算法,采用java实现。
交换算法得到全排列,排列组合的全排列算法(交换算法)
组合数学中六种全排列算法详细解析,对于自学很有帮助哦,这里没有代码。
实现了全排列算法,每个元素用char类型表示,用递归算法,比较简洁实用。
用objective-c实现全排列算法,用数组来保存全排列排列的结果
主要介绍了Python字符串的全排列算法,结合实例形式较为详细的总结分析了Python字符串全排列的常见操作技巧,需要的朋友可以参考下
全排列算法设计分析.ppt
大一时候使用javascript写的全排列算法演示(分为回溯法演示和交换法演示),既可以用来学习javascript,又可以用来加深对全排列算法的理解,有需要的朋友们可以下载~