Algorithm/DS, algorithms

Stack Permutation C++

Henu 2021. 4. 19. 20:26

순열을 구하기위해 dfs를 사용했는데 visit 배열 대신 stack을 사용해서 구현해보았음

 

n이 8이 넘어가면 하루종일 걸려요.. 모든 경우의 수를 출력해주기 때문에 어쩔 수 없다

 

if(node == N) 부분의 for 문을 보면 N이 i에 대한 조건으로 있는데 이 N을 입력받은 N보다 작게 바꿔주면

ex ) N이 6일 때 4로 설정

-> 6까지의 숫자 중 4개를 골라 만들 수 있는 모든 순열이 출력된다

 

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 <vector>
using namespace std;
 
vector<int> _stack;
int N, check[10= {0, };
 
void dfs_stack(int node){
    if(node == N){
        for(int i = 0; i < N; i++){
            cout << _stack[i] << " ";
        }
        cout << endl;
        return;
    }
    for(int i = 0; i < N; i++){
        if(check[i] == 0){
            _stack.push_back(i+1);
            check[i] = 1;
            dfs_stack(node+1);
            _stack.pop_back();
            check[i] = 0;
        }
    }
}
 
int main(){
    cin >> N;
    dfs_stack(0);
    return 0;
}
 
cs