这是我作业中的一个一般性问题,我只是要求一些想法或伪代码。
假设我正在使用 C++ 构建一个井字游戏。我已经拥有的是一个Node
类,它包含一个 const 成员数据表示当前游戏板状态,以及一个指向其他节点的指针的 const 数组,其中包含每个可能的下一步状态。所以这将是一个没有重复节点的有向图(每个节点都有其独特的游戏状态。)。
当我尝试生成这样的图表时遇到了麻烦。似乎我需要使用递归,因为所有数据成员Node
class 是 const 所以没有办法改变它们。如果不复制节点,我很难想出一个好主意来立即生成这样的图(我的意思是让它成为一棵树很容易,但它会浪费大量的空间和时间。)。一件事可能会有所帮助,我能够比较两种不同的游戏状态,而且我认为我不能使用除<set>
.
因此,如果有人对此有任何想法,请随意写下您的想法或伪代码。谢谢
问问题
1068 次
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 回答