개요
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
실버급 백트래킹 문제다.
풀이
배열을 재귀로 탐색하다 조건이 맞으면(수열의 길이가 M이 됐을 때) 리턴시켜줬다.
방문이 끝나면 다른 경우의 수에서도 인덱스를 방문 할 수 있도록 방문 배열을 다시 false 시켜주어야 한다.
코드
#include<iostream>
#include<algorithm>
using namespace std;
constexpr int LIMIT = 10;
int N, M;
int num[LIMIT];
bool visited[LIMIT];
void slove(int cnt)
{
if (cnt > M)
{
for (int i = 1; i <= M; i++)
cout << num[i] << " ";
cout << "\n";
return;
}
for (int i = 1; i <= N; i++)
{
if (visited[i]) continue;
visited[i] = true;
num[cnt] = i;
slove(cnt+1);
visited[i] = false;
}
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
cin >> N >> M;
slove(1);
}
728x90
'알고리즘&자료구조 > 문제' 카테고리의 다른 글
[BOJ] 11123 양 한마리... 양 두마리... C++ (0) | 2023.02.09 |
---|---|
[BOJ] 11931 수 정렬하기 4 C++ (0) | 2023.02.08 |
[BOJ] 16933 벽 부수고 이동하기 3 C++ (0) | 2023.02.06 |
[BOJ] 14442 벽 부수고 이동하기 2 C++ (2) | 2023.02.05 |
[BOJ] 2206 벽 부수고 이동하기 C++ (0) | 2023.02.04 |