늘 겸손하게

문제 15649 ( C++ ) 본문

코딩 문제/백준

문제 15649 ( C++ )

besforyou999 2021. 6. 29. 14:32

백트래킹 문제

한번 선택한 정수는 다시 선택할 수 없으므로 visited 배열을 이용하여 promising 한지 promising 하지 않은지 판별할 수 있습니다. 재귀적으로 깊이 들어가다가 M 개의 수를 선택하면 결과를 출력합니다

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
  
using namespace std;
 
const int MAX = 9;
 
int N, M;
int arr[MAX] = {0,};
bool visited[MAX] = {0,};
 
void dfs(int cnt) {
 
  if (cnt == M ) {
    for (int i = 0; i < M; i++ )
      cout << arr[i] << " ";
 
    cout << "\n";
    return ;
  }
 
  for (int i = 1; i <= N ; i++ ) {
    if (!visited[i]) {
      visited[i] = true;
      arr[cnt] = i;
      dfs(cnt + 1 );
      visited[i] = false;
    }
  }
 
}
 
int main(void) {
 
  cin >> N >> M;
 
  dfs(0);
 
  return 0;
}
 
cs

 

결과

'코딩 문제 > 백준' 카테고리의 다른 글

문제 1931 ( C++)  (0) 2021.07.03
문제 11047 ( C++ )  (0) 2021.07.02
문제 2798 ( C++ )  (0) 2021.06.29
문제 10870 ( C++ / Python )  (0) 2021.06.29
문제 10872  (0) 2021.06.28