순열 흐름도


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

+ Recent posts