예를 들어, abc --> a, b, c, ab, bc, ac, abc
#include <stdio.h>
#include <string.h>
void swap(char *p1, char *p2)
{
char t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
void perm(char *in, int st, int en)
{
int j = 0;
if( st == en) {
for( j = 0; j < en; j++)
printf("%c", in[j]);
printf("\n");
}
else {
/* in[st]에서 in[en]까지에 둘 이상의 순열이 있으면 이것을 순환적으로 생성 */
for( j = st; j < en; j++) {
SWAP(&in[st], &in[j]);
perm(in, st+1, en);
/* 인덱스 i와 인덱스 j의 데이터 위치의 위치 교환을 위해 원래 위치로 복귀*/
SWAP(&in[st], &in[j]);
}
}
}
#include <stdio.h>
#include <string.h>
void swap(char *p1, char *p2)
{
char t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
void perm(char *in, int st, int en)
{
int j = 0;
if( st == en) {
for( j = 0; j < en; j++)
printf("%c", in[j]);
printf("\n");
}
else {
/* in[st]에서 in[en]까지에 둘 이상의 순열이 있으면 이것을 순환적으로 생성 */
for( j = st; j < en; j++) {
SWAP(&in[st], &in[j]);
perm(in, st+1, en);
/* 인덱스 i와 인덱스 j의 데이터 위치의 위치 교환을 위해 원래 위치로 복귀*/
SWAP(&in[st], &in[j]);
}
}
}
'IT > 알고리즘' 카테고리의 다른 글
하나의 소수(솟수)가 주어졌을때, 다음 소수(솟수)를 찾는 알고리즘 (0) | 2008.07.15 |
---|---|
qsort (퀵 정렬) - 재귀, 비재귀, 삽입정렬, 난수발생 (1) | 2008.07.15 |
mmap (메모리맵) (0) | 2008.07.08 |
피보나치 수열 (2) | 2008.07.08 |
문자열을 뒤집는 프로그램 (0) | 2008.07.08 |