0

这是我作业中的一个一般性问题,我只是要求一些想法或伪代码。

假设我正在使用 C++ 构建一个井字游戏。我已经拥有的是一个Node类,它包含一个 const 成员数据表示当前游戏板状态,以及一个指向其他节点的指针的 const 数组,其中包含每个可能的下一步状态。所以这将是一个没有重复节点的有向图(每个节点都有其独特的游戏状态。)。

当我尝试生成这样的图表时遇到了麻烦。似乎我需要使用递归,因为所有数据成员Nodeclass 是 const 所以没有办法改变它们。如果不复制节点,我很难想出一个好主意来立即生成这样的图(我的意思是让它成为一棵树很容易,但它会浪费大量的空间和时间。)。一件事可能会有所帮助,我能够比较两种不同的游戏状态,而且我认为我不能使用除<set>.

因此,如果有人对此有任何想法,请随意写下您的想法或伪代码。谢谢

4

1 回答 1

0

我认为您需要检查是否存在:

std::set< Node > checked_node;

bool isNodeChecked( Node ){
    return checked_node.find( Node )!=checked_node.end();
}

你需要重载类似operator =operator <for的东西std::set来处理你的class Node;

std::unordered_map可能工作。

(尽管在我看来,井字游戏状态可以用 0 到 3^9 的非负整数表示。这样,std::set 就足够了,但您需要额外的编码解码功能。

于 2013-02-16T06:06:44.783 回答