【发布时间】:2011-08-05 09:44:06
【问题描述】:
我现在正在制作 15 谜题求解器(在 C++ 中),但我的程序不仅必须解决 15 谜题,还必须解决 3x4 谜题、8x8 谜题等... - > X x Y 谜题。我必须以某种方式保留有关已访问状态的信息,我的第一个想法是制作树,例如:
谜题:
状态 1
1 2
3 0
状态 2
1 3
0 2
我留在我的树上:
根->1->2->3->0
\_
\->3->0->2
这也适用于 5x3、6x6 等拼图,适用于所有拼图
这个想法行得通,但是很浪费内存,而且添加节点需要一些时间:/所以效率很低。
下一个想法是在 stl 的 std::map 中保持访问状态,但我不知道如何制作好的散列函数 - 从拼图状态制作快捷方式(因为我不必存储拼图状态,我只需要已访问过的信息。您有什么想法,对于 std::map 的密钥,或其他保持已访问状态信息的想法吗?
【问题讨论】:
-
std::map是红黑树,而不是哈希。 -
我现在但是,我想例如: std::map
,然后我可以将状态 4x4“压缩”到一个 int,但对于更大的状态它将不起作用(例如 8x8,那么我的数字最大为 64!:()
标签: c++ algorithm data-structures map hash-function