对于数组[1, 2, 3],他们按照从小到大的全排列是
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
现在给你一个正整数n,n小于8,输出数组[1, 2, …,n]的从小到大的全排列。
Input
输入有多行,每行一个整数。当输入0时结束输入。
Output
对于每组输入,输出该组的全排列。每一行是一种可能的排列,共n个整数,每个整数用一个空格隔开,每行末尾没有空格。
Sample Input
2 3 0
Sample Output
1 2 2 1 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
菜鸡菜鸡
dfs模板问题,数字的全排列
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int n;
static int[] a=new int[12];
static boolean[] book=new boolean[10];
static void dfs(int index){
if(index==n+1){
for(int i=1;i<=n;i++){
if(i==1)
System.out.print(a[i]);
else
System.out.print(" "+a[i]);
}
System.out.println();
return;
}else{
for(int i=1;i<=n;i++){
if(book[i]==false){//如果数字i还在手里
book[i]=true;//标记数字i已被放入箱子(已被尝试)
a[index]=i;//index号箱子放入数字i
dfs(index+1);//再来放后面的箱子
book[i]=false;//将尝试的数字i从箱子里拿出
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
while(n!=0){
Arrays.fill(book, false);
dfs(1);
n=sc.nextInt();
}
}
}