옵션 |
|
//에졔 1.4
#include <stdio.h>
void perm(char *list, int i, int n);
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
int main()
{
char list[3] = { 'a','b','c' };
perm(list, 0, 2);
}
void perm(char *list,int i,int n)
//*list[i]에서 list[n]까지의 모든 순열을 생성
{
int j, temp;
if (i == n) {
for (j = 0; j <= n; j++)
printf("%c",list[j]);
printf(" \n");
}
else
//list[i]에서 list[n]까지에 둘 이상의 순열이 있으면 이것을 순환적으로 생성
for (j = i; j <= n; j++) {
SWAP(list[i], list[j], temp);
perm(list, i + 1, n);
SWAP(list[i], list[j], temp);
}
}
결과는
abc
acb
bac
bca
cba
cab
여기서 abc가 어떻게 나오는지 까지는 이해가 가는데 그 이후부터 어떻게 돌아가는지 모르겟습니다..
perm(list,i+1,n)함수가 2번 재귀호출 된후 abc출력후 다시 돌아가는걸로 알고있는데..2번 되돌아 가야 하는걸로 아는데 1번째 되돌아 갈때 perm밑에
있는 매크로함수 swap를 실행하고 다시 되돌아 가는건지 그냥 바로 2번되돌아가서 perm함수 밑에 swap매크로함수를 출력하는건지.. 머리가 뒤죽박
죽이네요.. ㅜㅜ