我正在尝试安排井字游戏板。所以我有以下代码:
// 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()) );
但是它只输出一次原始字符串。我假设每个字符都必须是唯一的。我该怎么做?
最佳答案
std::next_permutation
按字典顺序返回下一个排列,如果生成了第一个排列(按该顺序),则返回false
。
由于以("xxxxxoooo"
)开头的字符串实际上是按字母顺序排列的该字符串字符的最后一个排列,因此循环立即停止。
因此,您可以在开始循环调用moves
之前尝试对next_permutation()
进行排序:
std::string moves = "xxxxxoooo";
sort(begin(moves), end(moves));
while (std::next_permutation(begin(moves), end(moves)))
{
std::cout << moves << std::endl;
}
这是一个live example。