Demo entry 6754823

1

   

Submitted by anonymous on Jul 22, 2018 at 19:39
Language: Perl. Code size: 995 Bytes.

#include <stdio.h>

int arr[] = {1,2,3,4};

void swap(int *a, int *b ){
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;
}

void print_arr(int size){
	for(int i=0; i < size; i++)
		printf("%d ", arr[i]);
	printf("\n");
}

void permutation(int n, int r, int depth){

	// r depth 크기가 같아지면 출력하고 반환합니다.
	// 배열 index 0부터 depth-1까지(r-1까지)
	//  r개만큼 앞에서 순열이 생성되었기에 반환합니다.
	if( r == depth){
		print_arr(depth);
		return;
	}

	// 원리는 위와 같습니다.

	// 1-2-3에서 2개를 고른다고 가정하면

	// 배열에서 1(변수 i) 1(변수 depth) 바꿉니다.
	// 그러면 1 제일 앞에 고정이고
	// depth 1 증가시켜 다시 함수를 호출하면
	// 23 둘이 바꾸는 경우가 생기므로
	// 1-2 1-3 생성됩니다.

	//  다음
	// 배열에서 2(변수 i) 1(변수 depth) 바꿉니다.
	// 그러면 2 제일 앞에 고정이고
	// depth 1 증가시켜 다시 함수를 호출하면
	// 13 둘이 바꾸는 경우가 생기므로
	// 2-1 2-3 생성됩니다.
	for(int i=depth; i<n; i++){
		swap(&arr[i], &arr[depth]);
		permutation(n, r, depth+1);
		swap(&arr[i], &arr[depth]);
	}


}

int main() {
	permutation(sizeof(arr)/sizeof(int), 3, 0);
	return 0;
}

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).