K12教育赛事综合服务平台
聚乐之家官方网站
下载聚乐之家官方App
专注青少年竞赛题库网站
状压BFS是广度优先搜索的衍生算法,通过压缩编码方式将多维度的离散状态存储为单个可快速操作的数值,广泛应用于带状态约束的最短路径类问题。
状压BFS的核心思想之一是用二进制整数的每一位表示某一维度的二元状态,例如迷宫问题中n把钥匙的持有情况可以用n位二进制数记录,每一位为1代表持有对应钥匙,为0代表未持有
为了避免重复搜索导致的超时,状压BFS的访问标记数组需要覆盖所有状态维度,例如带钥匙的迷宫问题中,vis数组的维度需要包含坐标x、y以及压缩后的钥匙状态值
状压BFS的时间复杂度仅和搜索的总节点数有关,和状态的编码存储方式完全无关,无论用整数还是字符串存储压缩状态,最终的运行效率都一致
在C++中实现状压BFS时,通常可以用队列存储每个节点的坐标、压缩状态、当前步数,20位以内的压缩状态可以直接用int类型存储,更多位的状态可选用bitset或long long类型