c++ - 如何以尽可能少的时间复杂度检测网格中的循环?

标签 c++ algorithm graph cycle

我有一个最多 35 个字符的网格,它可能是(1x35..5x7)或其他任何东西。网格上每个单元格的值只能是二进制的。在模拟具有某些 Action 的游戏时,这意味着等级可能发生变化移动后的状态。如果我必须检测这个游戏的周期/周期,我可以在尽可能少的时间复杂度下使用什么算法/数据结构?我尝试了一种基于 log n 树的方法来存储网格的状态,但是当周期大于 2^17 时,它对于我的目的来说不够快。有没有一种技术可以在不占用太多内存的情况下对网格状态执行哈希?

最佳答案

网格是一个 35 位数字,因此您可以将网格存储为整数(在 64 位机器上)或 2 个字(在较小的机器上)。您可以在巨大的直接地址数组或哈希表中保留您已经看到的状态。

关于c++ - 如何以尽可能少的时间复杂度检测网格中的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763838/

相关文章:

c++ - "friend struct A;"和 "friend A;"语法有什么区别?

c++ - 需要有关 C++/CLI 中串行端口通信的建议

algorithm - 图中最大化值的最佳路径

algorithm - 使用深度优先搜索查找所有简单路径的复杂性?

c++ - 套接字超时 : select vs setsockopt

c++ - 非托管 C++ 和 Delphi 之间的 COM 问题

javascript - 账户负天数

平滑 alpha 交叉淡入淡出的算法?

java - 在运行时更改实现/类

java - 如何让 getWeight() 返回该边的权重