递归实现排列型枚举 Java
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[] arr; // 存放每行最终结果
static boolean[] checked; // 标记已检查点
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
arr = new int[n + 1];
checked = new boolean[n + 1];
dfs(1); // 从1开始搜索
}
static void dfs(int pos) {
if (pos > n) {
for (int i = 1; i <= n; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
// return回溯继续搜索
} else {
for (int i = 1; i <= n; i++) {
if (!checked[i]) {
checked[i] = true;
arr[pos] = i;
dfs(pos + 1);
checked[i] = false; // 重置标记状态
}
}
}
}
}
DFS模板题~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~