由于要有一个比赛,补补算法吧...
package 万能的搜索;
import java.util.Scanner;
/** 深度优先搜索
* 1-n的全排列(相当于将1~n不同的牌放进不同的盒子里面-->1~n编号的盒子里面)
* void dfs(int step){
* (1)判断边界
* (2)尝试每一种可能for(int i=1;i<=n;i++){(3)继续下一步dfs(step+1); }
* return;
* }
* */
public class Demo01 {
public static int[] book = new int[10];// 用来标记那张牌已经放进盒子了
public static int n;
public static int[] a = new int[10]; // 相当于盒子
public static void dfs(int step) { //step表示站在第几个盒子面前
if(step == n+1) {
for(int i=1;i<=n;i++)
System.out.print(a[i]);
System.out.println();
return;
}
for(int i=1;i<=n;i++) {//此时站在第step个盒子面前,按照1-n的顺序依次尝试每张牌
if(book[i]==0) {
a[step]=i;
book[i] = 1; //标记这张牌已经放入过了
dfs(step+1); //继续下一个
book[i] = 0; //取消标记
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
dfs(1); //开始站在一号小盒子面前
}
}