这是我作业中的一般性问题,我只是想问一些想法或伪代码。
假设我正在使用C ++构建一个tic-tac-toe游戏。我已经拥有的是一个Node
类,它包含一个表示当前游戏板状态的const成员数据,以及一个指向包含每个可能的下一步状态的其他节点的指针的const数组。因此,这将是一个有重复节点的有向图(每个节点都有其独特的游戏状态。)。
当我试图生成这样的图时,我遇到了麻烦。看起来我需要使用递归,因为Node
类中的所有数据成员都是常量,所以没有办法改变它们。在没有Node重复的情况下,我很难想出一个好主意立即生成这样的图形(我的意思是很容易使它成为一棵树,但它浪费了大量的空间和时间。)。有一点可能有帮助,我可以比较两种不同的游戏状态,我不认为我可以使用<set>
以外的任何模板。
因此,如果有人对此有所了解,请随意写下您的想法或伪代码。谢谢
答案 0 :(得分:0)
我认为你需要检查是否存在:
std::set< Node > checked_node;
bool isNodeChecked( Node ){
return checked_node.find( Node )!=checked_node.end();
}
您需要为operator =
上的operator <
和std::set
等内容加载class Node
;
std::unordered_map
也可能有用。
(虽然在我看来,tic-tac-toe状态可以用0到3 ^ 9的非负整数表示。这样一个std :: set就足够但你需要额外的编码解码函数