P1706 全排列问题(DFS+回溯)


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;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_28635317/article/details/114329339