더북(TheBook)

1.6.6 정수 배열의 순열

문제 1-19 주어진 정수 배열에서 모든 순열(permutation)을 구하세요.

해결책 인덱스의 각 수를 재귀적으로 호출하는 순열 함수에서 i는 i의 오른쪽에 있는 모든 수와 바뀝니다. 각 수는 오른쪽에 있는 모든 수와 맞바꿔져 가능한 모든 순열을 만듭니다.

해결책 1-19

void permutation(int *arr, int i, int length)
{
    if (length == i) {
        printArray(arr, length);
        return;
    }
    for (j = i; j < length; j++) {
        swap(arr, i, j);
        permutation(arr, i + 1, length);
        swap(arr, i, j);
    }
}

/* 테스트 코드 */
int main()
{
    int arr[5];
    for (int i = 0; i < 5; i++) {
        arr[i] = i;
    }
    permutation(arr, 0, 5);
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.