[재귀함수로 풀수 있는 브루트포스 문제 종류]
[풀이]
check[i]: i를 사용했으면 true, 안했으면 false
arr[] : 수열 저장하는 배열
func(index,n,m)함수의 역할 : index번째의 수를 결정.
이 문제의 시간복잡도 : N(N-1)...*1=N!
//15649. N과 M (1)
#include <iostream>
using namespace std;
bool check[10];
int arr[10];
void func(int index,int n,int m){
if(index>m){
// 수열 출력 부분
for(int i=1; i<=m; i++){
cout<<arr[i]<<" ";
}
//한번의 출력이 끝나면 줄바꿈 해주기
cout<<"\n";
return;
}
for(int i=1;i<=n; i++){
if(check[i])
continue;
check[i]=true;
arr[index]=i;
func(index+1,n,m);
check[i]=false;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>n>>m;
func(1,n,m);
}