c++ 자료구조, 알고리즘
조합, 순열
무한 나무
2023. 2. 9. 21:12
순열 (Permutation)
void Permutation(vector<char>& source, int R, int start) // nPr
{
if (start >= R)
{
for (int i = 0; i < R; i++)
{
cout << source[i];
}
cout << endl;
}
else
{
for (int i = start; i < source.size(); i++)
{
swap(source[start], source[i]);
P(source, R, start + 1);
swap(source[i], source[start]);
}
}
}
조합 (Combination)
void Combination(vector<char>& source, int R, int start,int idx) // nCr
{
if (start >= R)
{
for (int i = 0; i < R; i++)
{
cout << source[i];
}
cout << endl;
}
else
{
for (int i = idx; i < source.size(); i++)
{
swap(source[start], source[i]);
C(source, R, start+1, i+1);
swap(source[i], source[start]);
}
}
}
중복 조합
void Dupli_C(vector<char>& source, int R, int start, int idx)
{
static vector<char> temp(source.size());
if (start >= R)
{
for (int i = 0; i < R; i++)
{
cout << temp[i];
}
cout << endl;
}
else
{
for (int i = idx; i < source.size(); i++) //중복 순열 일땐, i=0 으로 바꾸면 됨
{
temp[start] = source[i];
Dupli_C(source, R, start + 1, i);
}
}
}