here で説明されている辞書順で一意の順列を生成するアルゴリズムを実装しようとしています。以下は私の実装です。
void My_Permute(string word) {
sort(word.begin(),word.end());
int size = word.size();
while (true) {
cout << word << endl;
int i = size - 2;
for (; i >= 0; --i) {
if (word[i] < word[i+1]) break;
}
if (i <= -1) break;
swap(word[i],word[i+1]);
cout << word << endl;
reverse(word.begin()+i+1,word.end());
}
}
アルゴリズムは正しいと確信していますが、実装の何が問題なのですか? 私の機能はいくつかの順列を欠いています。以下は、入力の std::next_permutation と比較した私の出力を示していますabcd
。
My_Permute std::next_permutation
abcd abcd
abdc abdc
abdc acbd
adbc adbc
adcb adcb
dacb bacd
dbca bcad
dcba bcda
dcab bdac
dcba bdca
dcba cabd
cadb
cbad
...