백준/15650/Backtracking/N과 M(2)
오름차순 + 1부터N까지 자연수 중에서 중복 없이 M개를 고른 수열을 나열하기 위해
백트래킹을 시도합니다.
for (int i = prev_num;i <= num_max;i++)
{
result[len] = i;
recursion(i + 1, num_max, len + 1, condition);
result[len] = 0;
}
각 인덱스의 값들을 채워나가면서 다음 함수에서는 전 인덱스의 숫자보다 높게 뽑게끔 다음 재귀함수는 for문이 현재 뽑은 값보다 1증가한 값부터 채울 수 있게 하였습니다.
#include<iostream>
using namespace std;
int result[9];
void recursion(int prev_num, int num_max, int len, int condition)
{
if (len == condition)
{
for (int i = 0;i < len;i++)
{
cout << result[i] << ' ';
}
cout << '\n';
return;
}
for (int i = prev_num;i <= num_max;i++)
{
result[len] = i;
recursion(i + 1, num_max, len + 1, condition);
result[len] = 0;
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int N, M = 0;
cin >> N >> M;
recursion(1, N, 0, M);
return 0;
}