Reputation:
I'm trying to get an arrangement of tic tac toe boards. So I have the following code:
// 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()) );
But it only outputs the original string once. I'm assuming that each character has to be unique. What's a way I can do this?
Upvotes: 11
Views: 17921
Reputation: 126412
std::next_permutation
returns the next permutation in lexicographic order, and returns false
if the first permutation (in that order) is generated.
Since the string you start with ("xxxxxoooo"
) is actually the last permutation of that string's characters in lexicographic order, your loop stops immediately.
Therefore, you may try sorting moves
before starting to call next_permutation()
in a loop:
std::string moves = "xxxxxoooo";
sort(begin(moves), end(moves));
while (std::next_permutation(begin(moves), end(moves)))
{
std::cout << moves << std::endl;
}
Here is a live example.
Upvotes: 19