Javaは再帰で全配列を実現し、詳細
1892 ワード
package edu.cqu.algorithmTest;
import java.util.Scanner;
//全配列、再帰的にpublic class Main 8{public static void main(String[]args){int[]arr={1,2,3};bfs(arr,0,arr.length-1);}
}
import java.util.Scanner;
//全配列、再帰的にpublic class Main 8{public static void main(String[]args){int[]arr={1,2,3};bfs(arr,0,arr.length-1);}
public static void bfs(int []a,int start,int end) {
/*
* , start :
* , ,start+1
* , ,start 1, start
* start , , 。 。
* ( start ), start i 1 。
* {1,2,3}
* {2,3} ,
* ,start {1}, {1} {2,3} 。i 2,3
*
*
* */
if(start == a.length) {
for(int i:a) {
System.out.print(i);
}
System.out.println();
}
for(int i = start;i < a.length;i++) {
if(isUnique(a,start,i)) {
swap(a,start,i);
bfs(a,start+1,i);
/*
* ?
* {1,2,3}, {1} {2,3} {2}, ,
* {2} {1,3} 2,1,3 2,3,1
* , {1} {2,3} 3 , [2,1,3][2,3,1]
* , 。 , , start,i ,
* 。 , 。
*
*
* */
swap(a,start,i);
}
}
}
static boolean isUnique(int a[],int start,int end ) {
/*
* // a[end] , {1} {2,3,4} 4 ,
* {2,3,1} , {2,3,1}
* {1} {4,3,4} 4 , {1} 4 , {1,3,4}
* 。
* , a[end] ,
*
*
* */
for(int i = start ;i < end; i++) {
if(a[i] == a[end]) {
return false;
}
}
return true;
}
public static void swap(int []a,int m,int n) {
int t = a[m];
a[m] = a[n];
a[n] = t;
}
}