2013-05-21 33 views
6

私はティックタックつま先板の配置をしようとしています。だから私は次のコードを持っています:next_permutationの使い方

// 5 turns for x if x goes first 
std::string moves = "xxxxxoooo"; 

do { 
    std::cout << moves << std::endl; 
} while (std::next_permutation(moves.begin(), moves.end())); 

しかし、それは元の文字列を1回だけ出力します。私は各キャラクターがユニークでなければならないと仮定しています。私はこれを行う方法は何ですか?

+4

逆順で始めると、 'next_permutation'はそれらを辞書順に生成します。あなたが持っているのは、辞書編集的に最後です。 –

答えて

14

std::next_permutationは、辞書順で次の順列を返し、最初の順列(この順番で)が生成された場合はfalseを返します。

"xxxxxoooo")で始まる文字列は、実際には文字列の文字の辞書順での最後の置換であるため、ループはすぐに終了します。

したがって、あなたは、ループ内でnext_permutation()を呼び出すために開始する前にmovesをソートしてみてください可能性があります。ここでは

std::string moves = "xxxxxoooo"; 
sort(begin(moves), end(moves)); 

while (std::next_permutation(begin(moves), end(moves))) 
{ 
    std::cout << moves << std::endl; 
} 

live exampleです。