<링크>
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 체크를 해제해주고 벡터의 맨 끝 숫자를 빼준다.
'알고리즘 풀이 > DFS' 카테고리의 다른 글
백준 10971 외판원 순회 2 (0) | 2018.07.28 |
---|---|
백준 10819 차이를 최대로 (0) | 2018.07.27 |
KOITP 큰수만들기 (0) | 2018.07.23 |
백준 11724 연결 요소의 개수 :: 들짐승 (0) | 2018.07.23 |
백준 11403 경로 찾기 :: 들짐승 (0) | 2018.07.23 |