#작성 코드
#include <iostream>
#include <vector>
using namespace std;
int N, M;
vector<int> v;
bool visit[9];
void dfs(int idx, int cnt){
if( cnt == M ){
for(int i=0; i<v.size(); i++){
cout<<v[i]<<' ';
}
cout<<'\n';
}
for(int i=idx+1; i<=N; i++){
if( visit[i] == true ){
continue;
}
visit[i] = true;
v.push_back(i);
dfs(i, cnt+1);
visit[i] = false;
v.pop_back();
}
}
int main(){
cin>>N>>M;
dfs(0, 0);
return 0;
}
##
앞의 15649문제와 다른 점은 오름차순으로 중복 없는 순열을 출력해야 한다는 것이다.
=> DFS호출시에 현재 idx를 매개변수로 함께 넣어줘서 방문할 숫자를 해당 dfs의 idx에서부터 시작하도록 하였다.
dfs(0, 0)으로 호출했으므로 자연수 1부터 방문해야하니까 i = idx+1 ~ i<=N
'BOJ' 카테고리의 다른 글
BOJ 15652번 :: N과 M(4) (0) | 2019.11.25 |
---|---|
BOJ 15651번 :: N과 M(3) (0) | 2019.11.25 |
BOJ 15649번 :: N과 M(1) (0) | 2019.11.24 |
BOJ 10814번 :: 나이순 정렬 (0) | 2019.11.24 |
BOJ 11651번 :: 좌표 정렬하기2 (0) | 2019.11.24 |