方法一:
将n的全排列转化为n-1的全排列,递归完成:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* <p>
* Title:全排列算法
* </p>
*
*/
public class AllSort {
//将NUM设置为待排列数组的长度即实现全排列
private static int NUM = 4;
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "a", "b", "c", "d" };
sort(Arrays.asList(datas), new ArrayList());
}
}
方法二,dfs深度遍历,利用数组记录访问历史,无需像上例动态remove链表
public class DfsFullSort {
private int[] a = {1,2,3};
private boolean[] vis = {false,false,false};
private int n = 3;
public static void main(String[] args) {
DfsFullSort sort = new DfsFullSort();
sort.dfs(0,"");
}
private void dfs(int step,String s) {
if (step == a.length) {
System.out.println(s);
return;
}
for (int i = 0; i < n; i++) {
if (!vis[i]) {
vis[i] = true;
String t =s;
s = s + a[i];
dfs(step + 1,s);
s= t;
vis[i] = false;
}
}
}
}
分享到:
相关推荐
自己写的基于字符的全排列算法,代码简洁,高效,7位数的全排列都是秒排!用到了广度优先排列,深度优先搜索和几个递归,唯一没完成的是退出时释放内存,呵呵,破解密码时超有用的哟,,
全排列算法
基于全排列算法的完整代码解析,可供理解搜索的技巧,有很高的使用价值
全排列算法: 比如字符串abc,全排列结果为abc,acb,bac,bca,cba,cab。
全排列算法详细解析(完整版)
使用递归实现的全排列算法,输出所有的全排列。 各种主流程序设计语言实现!
全排列算法 实例 一种实现了n个数全排列的算法 全排列算法 实例 一种实现了n个数全排列的算法
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
实现了字典序法、递增进位制数法、递减进位制数法、邻位对换法四种全排列算法。全排列算法有很多种,这里只是其中的一些,可以调试运行比较一下各种算法的效率。(该代码为初级版本,注重算法的实现,在交互方面需要...
利用中介数实现全排列算法,采用java实现。
交换算法得到全排列,排列组合的全排列算法(交换算法)
组合数学中六种全排列算法详细解析,对于自学很有帮助哦,这里没有代码。
实现了全排列算法,每个元素用char类型表示,用递归算法,比较简洁实用。
用objective-c实现全排列算法,用数组来保存全排列排列的结果
主要介绍了Python字符串的全排列算法,结合实例形式较为详细的总结分析了Python字符串全排列的常见操作技巧,需要的朋友可以参考下
全排列算法设计分析.ppt
大一时候使用javascript写的全排列算法演示(分为回溯法演示和交换法演示),既可以用来学习javascript,又可以用来加深对全排列算法的理解,有需要的朋友们可以下载~