<링크>

https://www.acmicpc.net/problem/10974


<소스코드>

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
#include<stdio.h>
#include<vector>
using namespace std;
int isVisited[9];
int N;
void dfs();
vector<int> v;
int main()
{
    scanf("%d"&N);
    dfs();
}
void dfs()
{
    if (v.size() == N)
    {
        for (int i = 0; i < v.size(); ++i)
            printf("%d ", v[i]);
        printf("\n");
    }
    for(int i=1;i<=N;++i)
        if (!isVisited[i])
        {
            isVisited[i] = 1;
            v.push_back(i);
            dfs();
            isVisited[i] = 0;
            v.pop_back();
        }
}
cs


<풀이>


visit를 확인하면서 방문 안한 숫자를 넣으며 재귀를 돈다.

depth를 들어가면서

visit를 체크해주고, 벡터의 맨끝에 새로 추가될 숫자를 넣어준다.

복귀하면서. visit 체크를 해제해주고 벡터의 맨 끝 숫자를 빼준다.

+ Recent posts