//全排列
public class Test {
public static void main(String []args){
char str[]={'a','b','c','d'};
Arrange arr = new Arrange(str);
arr.backtrack(0);
}
}
class Arrange{
char []a; //保存要排列的数
int n;
int s[];
Arrange(char []m){
a=m;
n=a.length;
s=new int[n];
}
//回溯
void backtrack(int t){
if(t>=n){
for(int i=0;i<n;i++)
System.out.print(a[s[i]]+" ");
System.out.println();
} else{
for(int i=0;i<n;i++){
if(islegal(t,i)){
s[t]=i;
backtrack(t+1);
}
}
}
}
//判断在第t层之前是否有等于k的
private boolean islegal(int t,int k) {
for(int i=0;i<t;i++)
if(s[i]==k)
return false;
return true;
}
}
public class Test {
public static void main(String []args){
char str[]={'a','b','c','d'};
Arrange arr = new Arrange(str);
arr.backtrack(0);
}
}
class Arrange{
char []a; //保存要排列的数
int n;
int s[];
Arrange(char []m){
a=m;
n=a.length;
s=new int[n];
}
//回溯
void backtrack(int t){
if(t>=n){
for(int i=0;i<n;i++)
System.out.print(a[s[i]]+" ");
System.out.println();
} else{
for(int i=0;i<n;i++){
if(islegal(t,i)){
s[t]=i;
backtrack(t+1);
}
}
}
}
//判断在第t层之前是否有等于k的
private boolean islegal(int t,int k) {
for(int i=0;i<t;i++)
if(s[i]==k)
return false;
return true;
}
}