题目描述
输出从前M个字母中取N个的无重复字母排列
Input:
输入M,N(1<=M=10, N<=M)
Output:
按字典序输出排列
Sample Input:
4 2
Sample Output:
A B
A C
A D
B A
B C
B D
C A
C D
C D
D A
D B
D C
Hint:要用到剪枝
思路:
代码:
package _DFS算法;
import java.util.*;
public class _前M个中取N个无重复排列 {
private static int m;
private static int n;
private static boolean[] vis; //判断是否访问
private static char [] ch = {'A','B','C','D','E','F','G','H','I','J','K'};
private static char [] a; //存放路径
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
m = scan.nextInt();
n = scan.nextInt();
vis = new boolean [m+1];
a = new char[m+1];
dfs(1);
scan.close();
}
private static void dfs(int k) {
// TODO Auto-generated method stub
if(k>n) {
//结束条件--------------------------------
print(a);
return;
}
for(int i=1;i<=m;i++) {
if(!vis[i]) {
vis[i] = true;
a[k] = ch[i-1];
dfs(k+1); //递归------------------------
vis[i] = false;//回溯---------------------
a[k] = ' ';
}
}
}
private static void print(char[] a) {
// TODO Auto-generated method stub
for(int i=1;i<=n;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}