- 最原始的dfs
public class Main {
public static void main(String[] args) {
char[] arr ={'a','b','c'};
boolean[] used = {false,false,false};
char[] rs = new char[arr.length];
dfs(arr,used,rs,0);
}
public static void dfs(char[] arr, boolean[] used, char[] rs,int level){
if(level==arr.length){
System.out.println(Arrays.toString(rs));
return;
}
for(int i=0;i<arr.length;i++){
if(!used[i]){
rs[level] = arr[i];
used[i] = true;
dfs(arr,used,rs,level+1);
rs[level] = ' ';
used[i] = false;
}
}
}
}
- 稍微优化一下的dfs
import java.util.*;
public class Main {
public static void main(String[] args) {
char[] arr ={'a','b','c'};
boolean[] used = {false,false,false};
Stack<Character> rs = new Stack<>();
dfs(arr,used,rs);
}
public static void dfs(char[] arr, boolean[] used, Stack<Character> rs){
if(rs.size()==arr.length){
System.out.println(rs.toString());
return;
}
for(int i=0;i<arr.length;i++){
if(!used[i]){
rs.push(arr[i]);
used[i] = true;
dfs(arr,used,rs);
rs.pop();
used[i] = false;
}
}
}
}
- 再次优化一下
import java.util.*;
public class Main {
public static void main(String[] args) {
char[] arr ={'a','b','c'};
boolean[] used = {false,false,false};
Stack<Character> rs = new Stack<>();
dfs(arr,rs);
}
public static void dfs(char[] arr, Stack<Character> rs){
if(rs.size()==arr.length){
System.out.println(rs.toString());
return;
}
for(int i=0;i<arr.length;i++){
char temp = arr[i];
if(arr[i] != ' '){
rs.push(arr[i]);
arr[i] = ' ';
dfs(arr,rs);
rs.pop();
arr[i] = temp;
}
}
}
}
- 最终优化dfs
import java.util.*;
public class Main {
public static Stack<Character> rs = new Stack<>();
public static void main(String[] args) {
char[] arr ={'a','b','c'};
boolean[] used = {false,false,false};
dfs(arr);
}
public static void dfs(char[] arr){
if(rs.size()==arr.length){
System.out.println(rs.toString());
return;
}
for(int i=0;i<arr.length;i++){
char temp = arr[i];
if(arr[i] != ' '){
rs.push(arr[i]);
arr[i] = ' ';
dfs(arr);
rs.pop();
arr[i] = temp;
}
}
}
}