#include <iostream>
#include <vector>
#include <algorithm>
int N = 0;
int M = 0;
int iCount = 0;
bool visit[10] = {};
std::vector<int> vec = {};
std::vector<int> vecAns = {};
void DFS(int iStart, int iSize)
{
if (iSize == M)
{
for (int i = 0; i < M; ++i)
{
std::cout << vecAns[i] << " ";
}
std::cout << "\n";
return;
}
int iPrev = 0;
for (int i = 0; i < N; ++i)
{
if (iPrev != vec[i])
{
if (!visit[i])
{
visit[i] = true;
iPrev = vec[i];
vecAns[iSize] = vec[i];
DFS(i, iSize + 1);
visit[i] = false;
}
}
}
return;
}
int main()
{
std::cin >> N >> M;
for (int i = 0; i < N; ++i)
{
int iNumber = 0;
std::cin >> iNumber;
vec.push_back(iNumber);
}
std::sort(vec.begin(), vec.end());
vecAns.resize(M);
DFS(0, 0);
return 0;
}
이번 문제도 아주 약간 다릅니다. 중복이 되면 안됩니다.
그렇기에 이전에 했는가 체크만 하고 계쏙해서 실행합니다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 15686 치킨 배달 (0) | 2022.11.05 |
---|---|
[C++] 백준 15666 N과 M (12) (0) | 2022.11.04 |
[C++] 백준 15657 N과 M(8) (0) | 2022.11.02 |
[C++] 백준 15652 N과 M(4) (0) | 2022.11.01 |
[C++] 백준 14938 서강그라운드 (0) | 2022.10.31 |