我如何按字典顺序生成字母表中前n个字母的所有排列?

时间:2020-04-28 10:08:35

标签: c++ arrays permutation

找到一种方法,按字典顺序生成字母表中前n个字母的所有排列,但忽略具有两个彼此相邻的人声的结果。 我试过了,但是对于某些测试用例来说似乎是错误的,而且在其他情况下也很慢,因此我无法确定它是否适用于这些用例。它仅适用于少数情况。.
输入

4
输出

abcd
abdc
acbd
acdb
adbc
adcb
bacd
badc
bcad
bcda
bdac
bdca
cabd
cadb
cbad
cbda
cdab
cdba
dabc
dacb
dbac
dbca
dcab
dcba


#include <bits/stdc++.h>
using namespace std;

int n;
bool verify(char sir[9]) {
    char v[] = "aeiou";
    for (int i = 1; i < n; ++i) {
        char *p = strchr(v, sir[i]);
        if(p != 0) {
             p = strchr(v, sir[i - 1]);
            if(p != 0)
                return 0;
        }
    }
    return 1;
}

int main() {
    int lg = 0;
    char sir[9];
    cin >> n;
    for (char c = 'a'; c < 'a' + n; ++c) {
        sir[lg] = c;
        ++lg;
    }
    do {
        if(verify(sir)) {
            for (int i = 0; i < n; ++i)
                cout << sir[i] << ' ';
            cout << '\n';
        }
    } while(next_permutation(sir, sir + n));
    return 0;
}

0 个答案:

没有答案
相关问题