全排序问题
说明:
使用一个数组存储一个数是否已经被选取,第k位选取所有未选取的数并在每次选取完一个后递归选取下一个,然后从第一位选取到第N位
import java.util.Scanner;
public class Test {
public static int N; //0-(n-1)的全排序
public static int[] r; //记录所选择的数
public static int[] visit; //visit[i]记录i是否已选取
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
sc.close();
r = new int[N];
visit = new int[N];
f(0); //从第0为开始排序
}
public static void f(int k) { //递归实现全排序
if (k == N) { //已经选取完第k位,输出排序,结束递归
for (int i = 0; i < N; i++)
System.out.print(r[i]);
System.out.println();
}
for (int i = 0; i < N; i++) { //从0-(n-1)选取一个位选择的数
if (visit[i] == 0) {
r[k] = i;
visit[i] = 1; //标记位已选取状态
f(k + 1); //递归选取下一位数
visit[i] = 0; //回溯标记
}
}
}
}