티스토리 뷰

//순열생성알고리즘
#include<iostream>
#include<string>
using namespace std;
void swap(int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
}
void printSoon(int*arr,int N,int depth) {
	//basis case에 출력하게 만들자.
	if (depth == N) {
		for (int i = 0; i < N; i++) cout << arr[i];
		cout << endl;
	}
	for (int i = depth; i < N; i++) {
		swap(arr[i], arr[depth]);
		printSoon(arr, N, depth + 1);
		swap(arr[i], arr[depth]);
	}
}
int main() {
	int arr[] = {1,2,3,4,5};
	int N = 5;
	printSoon(arr, N,0);
}

fix의 개념과 recursive를 사용하였음 다음 그림을 토대로 fix된 문자까지를 depth라는 변수를 사용하여 표현하였음.

나머지 부분은 부분순열로 출력하면 되므로 그것이 recursive한 논리가 됨 nPn순열만 고려했는데 nPk도 생각나면 추가하겠음

댓글