java 实现全排列

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/*
 *  Boolean数组的初始化默认值是 false
 *  void DFS(int i)
 *   v[i]=true;
 *   for(v 的每一个连接点 w)
 *   if(!v[w])
 *   DFS(W)
 */

public class Main {

// 定义数组存储那些数组是被访问过的
public static boolean v[]=new boolean[100];
public static List<List<Integer>> sumNum =new ArrayList<List<Integer>>();

// 主函数
public static void main(String[] args) throws IOException {
// 输入
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] str = bf.readLine().split(" ");
int[] arrayFull=new int[str.length];
for(int i=0;i<str.length;i++){
arrayFull[i]=Integer.parseInt(str[i]);
}
// 搜索
slove(0,arrayFull);

// 输出结果
ListIterator<List<Integer>> ls = sumNum.listIterator();
while(ls.hasNext()){
List<Integer> lls = ls.next();
for (Integer llsnums : lls) {
System.out.print(llsnums);
}
System.out.println();
}
}

// 动态规划函数
private static void slove(int i, int[] arrayFull) {
// 表示 当前次遍历结束
if(i>=arrayFull.length){
ArrayList<Integer> r = new ArrayList<Integer>();
for(int j=0;j<arrayFull.length;j++){
if(v[j]){
r.add(arrayFull[j]);
}
}
sumNum.add(r);
return;
}
v[i]=true;
slove(i+1, arrayFull);//yes

v[i]=false;
slove(i+1, arrayFull);//no
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值