**
欢迎各位大佬指出问题
**
题目描述
排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n( 1<=n<=10)
输出
输出所有全排列
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
import java.util.Scanner;
public class Main{
static int sum;//需要访问多少个数据
static int[] rang;//排列得范围
static int[] book;//标记是否被访问过,1表示已经访问,0表示未访问
static int[] arr;//存放访问得数据
//len arr数组已经存放得数量
public static void dfs(int len) {
//结束条件
if(len == rang.length ) {
//输出数据
for(int i = 0; i < arr.length; i++)
if(i!=arr.length - 1)
System.out.print(arr[i]+" ");
else
System.out.print(arr[i]);
System.out.println();
return ;
}
for(int i = 0; i < rang.length; i++) {
//判断是否遍历过
if(book[i] == 1)
continue;
book[i] = 1;
arr[len] = i+1;//存放找到得数据
dfs(len+1);
book[i] = 0;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
sum = in.nextInt();
rang = new int[sum];
book = new int[sum];
for(int i = 0; i < book.length; i++){
book[i] = 0;
rang[i] = i + 1;
}
arr = new int[sum];
dfs(0);
}
}