순열 흐름도
n P k
재귀함수 종료조건 if( len == k )
즉 고른 숫자의 길이가 K일때 함수 종료.
흐름도에서 밑으로 레벨이 한단계 깊어질 수록 len이 +1 된다.
k = 1이면 len=1까지 (1레벨)만 진행되고,
k = 4일때 (즉 , 4 P 4 ) 일때 가장 깊은 레벨까지 재귀함수가 실행된다.
종료 조건 안의 배열 print는 len==k 길이 만큼 된다.
크기가 4인 배열의 함수에 숫자가 들어있어도 len(=k)만큼만 출력된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <iostream> #include <memory.h> int n = 2; //n개를 골라라 int m = 4; //인덱스범위 int arr[4]; int idx[4]={0,1,2,3}; void permutation(int len){ if(len == n){ for(int i=0 ;i<len;i++){ printf("%d ", idx[i]); } printf("\n"); return; } for(int i=len;i<m;i++){ swap(i,len); permutation(len+1); //len을 증가시키기 위함 swap(i,len); } } int main(int argc, const char * argv[]) { permutation(0); return 0; } | cs |
'Computer Science > Algorithms' 카테고리의 다른 글
[java] Dijkstra 다익스트라 알고리즘 (0) | 2019.02.19 |
---|---|
Kruskal 크루스칼 알고리즘 (0) | 2019.02.18 |
DisjointSets (0) | 2019.02.18 |
[java] Insertion Sort 삽입정렬 (0) | 2019.01.28 |
Dijkstra 최단경로 알고리즘 (2) | 2019.01.08 |