11

我正在尝试安排井字游戏。所以我有以下代码:

// 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()) );

但它只输出一次原始字符串。我假设每个角色都必须是独一无二的。我有什么办法可以做到这一点?

4

1 回答 1

18

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;
}

这是一个活生生的例子

于 2013-05-21T22:14:10.293 回答