문제 바로가기> 백준 15652번: N과 M (4)
재귀를 이용한 backtraking으로 문제를 풀었다. 같은 수를 여러번 고를 수 있도록 하고 중복되는 수열을 없도록 하기 위해서 m번 만큼 같은 수를 사용할 수 있도록 해주었고, 같은 i 부터 다시 반복문을 돌 수 있도록 하였다.
#include<iostream>
using namespace std;
int n, m;
int num[9]{};
int visit[9]{};
void backtracking(int from, int cnt){
if(cnt == m){
for(int i=0; i<m; i++) cout << num[i] << ' ';
cout << '\n';
return ;
}
for(int i=from; i<=n; i++){
if(visit[i]<m){
visit[i]++;
num[cnt] = i;
backtracking(i, cnt+1);
visit[i]--;
}
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n>>m;
backtracking(1, 0);
}