#작성 코드

#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

+ Recent posts