全排列一直困扰我许久,最近终于在《啊哈,算法》一书中,找到一个不错的写法
dfs(深搜写法)
import java.util.Scanner;
public class Main {
public static int n;
public static int a[] = new int[10];
public static int book[] = new int[10];
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int id = 1;
while(cin.hasNext()){
n = cin.nextInt();
System.out.println("Case "+ id++ +":");
dfs(1);//从1开始
}
cin.close();
}
public static void dfs(int step){
if(step==n+1){//如果是n+1,说明已经结束
System.out.print("[");
for(int i=1;i<=n;i++){
if(i==n)
System.out.print(a[i]+"]");
else
System.out.print(a[i]+", ");
}
System.out.println();
return;//返回最近一次调用dfs()的地方
}
for(int i=1;i<=n;i++){
if(book[i]==0){
a[step] = i;
book[i] = 1;//标记
dfs(step+1);//递归实现下一步
book[i] = 0;//回溯,取消标记
}
}
return;
}
}