最原始的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;
}
}
}
}