Algorithm/백준
C++ 알고리즘 - 백준 15649 N과 M (1) (백트래킹)
마루설아
2025. 1. 20. 19:19
https://www.acmicpc.net/problem/15649
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
/******** 전역변수 ********/
int n, m;
int arr[9] = { 0 };
bool visited[9] = { false };
/******** 함 수 ********/
void dfs(int num) { // DFS : 깊이 우선 탐색
if (num == m) { // 출력해야 할 만큼의 수(m) 가 되었을 때 출력
for (int i = 0; i < m; i++) {
cout << arr[i] << " ";
}
cout << endl;
return;
}
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
visited[i] = true; // 방문
arr[num] = i;
dfs(num + 1);
// 끝(m) 까지 방문 후 출력, 이후 방문하지 않은 상태로 변경
visited[i] = false;
}
}
}
int main(void) {
/******** C++ INIT ********/
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
/******** 변 수 ********/
/******** 구 현 ********/
cin >> n >> m;
dfs(0);
}