순열
package main.java;
import java.util.*;
public class PermutaionAndCombination {
static int[] output;
public static void main(String[] args) {
PermutationSwap(new int[]{1,3,5,6}, 0, 4, 3);
output = new int[3];
System.out.println("======");
Combination(new int[]{1,3,5,6}, 0, 0);
}
public static void Combination(int[] arr, int n, int k){
if(n == 3){
for(int x : output){
System.out.print(x+" ");
}
System.out.println();
}else{
for(int i = k; i<arr.length; i++){
output[n]=arr[i];
Combination(arr,n+1,i+1);
}
}
}
public static void PermutationSwap(int[] arr, int start, int n, int k) {
if(start==k){
for(int i = 0; i<k; i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}else{
for(int i = start; i<k; i++){
swap(arr,i, start);
PermutationSwap(arr, start+1, n, k);
swap(arr,i, start);
}
}
}
public static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
DFS방법
import java.util.*;
public class Main {
static int len = 3;
static int target = 2;
static boolean[] ch = new boolean[3];
static int[] arr = new int[]{3,6,9};
static int[] output = new int[2];
public static void main(String[] args) {
Permutation(0);
}
public static void Permutation(int n) {
if(n==target){
for(int x : output){
System.out.print(x+" ");
}
System.out.println();
}else{
for(int i = 0; i<len; i++){
if(!ch[i]){
ch[i]=true;
output[n]=arr[i];
Permutation(n+1);
ch[i]=false;
}
}
}
}
public static void Combination(int level, int s){
if(level==target){
for(int x : output){
System.out.print(x+" ");
}
System.out.println();
}else{
for(int i = s; i<arr.length; i++){
output[level]=arr[i];
Combination(level+1,i+1);
}
}
}
}