import java.util.Scanner;
/**
* DFS+回溯算法
* 关键:时间复杂度控制,直接输出会超时,用StringBuilder提高效率
*/
public class P1706 {
static StringBuilder sb = new StringBuilder();
static int n;
static int[] arr;
static boolean[] flag;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
arr = new int[n+1];
flag = new boolean[n+1];
dfs(1);
System.out.println(sb);
}
private static void dfs(int step) {
if(step>n) {
for(int i=1;i<=n;i++) {
sb.append(" "+arr[i]);
// System.out.printf("%5d",arr[i]);//直接输出会超市,时间复杂度不符合要求,用StringBuilder会提高效率
}
// System.out.println();
sb.append("\n");
return ;
}
for(int i=1;i<=n;i++) {
if(flag[i]==false) {
arr[step] = i;
flag[i] = true;
dfs(step+1);
flag[i] = false;
}
}
}
}
P1706 全排列问题(DFS+回溯)
猜你喜欢
转载自blog.csdn.net/qq_28635317/article/details/114329339
今日推荐
周排行