조금 간단한 백트래킹
0과 1로 이루어진 순열을 만들어 낸다 라고 생각하면 편하다.
모음이 1개 이상 , 자음이 2개 이상일 경우에만 출력하도록 조건을 걸면 된다.
#include <iostream>
using namespace std;
int l, c;
bool alpha[26];
char password[16];
void func(int pos, int last, int conson, int vow)
{
if (pos == l)
{
if (conson > 1 && vow > 0)
cout << password << '\n';
}
else
{
for (int i = last; i < 26; i++)
{
if (alpha[i])
{
bool vowol = false;
if (i == 0 || i == ('e' - 'a') || i == ('i' - 'a') || i == ('o' - 'a') || i == ('u' - 'a'))
vowol = true;
password[pos] = i + 'a';
alpha[i] = false;
func(pos + 1, i, conson + !vowol, vow + vowol);
password[pos] = 0;
alpha[i] = true;
}
}
}
}
int main()
{
cin >> l >> c;
for (int i = 0; i < c; i++)
{
char al;
cin >> al;
alpha[al - 'a'] = true;
}
func(0, 0, 0, 0);
return 0;
}
2019-01-11 10:00:00에 Tistory에서 작성되었습니다.