[백준 15649번 C++] N과 M(1)
2022. 7. 14. 23:08ㆍComputer Science/Algorithm
DFS를 사용하여 푸는 대표적인 문제중 하나.
순열 문제도 DFS를 사용하여 풀 수 있다는 것에 유의!
문제의 조건에 따라 케이스를 손으로 직접 쓰고, 눈에 보이는 규칙을 정리해서 그대로 코드로 구현하는 과정이 재밌다 :)
더보기
Check Point
1. DFS에서 재귀를 사용할 때의 기본 조건과, 배열 내 데이터를 삽입하고 삭제할때를 유의하여 코드를 구현한다.
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N, M;
vector<int> arr;
bool visited[8];
void DFS(int depth) {
if (depth == M) {
for (int i = 0; i <M; i++) {
cout << arr[i] << " ";
}
cout << "\n";
return;
}
for (int i = 1; i <= N; i++) {
if (visited[i]==false) {
visited[i] = true;
arr.push_back(i);
DFS(depth + 1);
visited[i] = false;
arr.pop_back();
}
}
}
int main() {
ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
cin >> N >> M;
DFS(0);
}
반응형
'Computer Science > Algorithm' 카테고리의 다른 글
[백준 2606번 C++] 바이러스 (0) | 2022.07.19 |
---|---|
[백준 1303번 C++] 전쟁-전투 (0) | 2022.07.19 |
[백준 1260번 C++] DFS와 BFS (0) | 2022.07.14 |
[프로그래머스/Python] 폰켓몬 (0) | 2022.02.03 |
[프로그래머스/Python] 완주하지 못한 선수 (0) | 2022.02.03 |