[POJ 1324]

Holedox Moving

搜索 + 滚动hash

给出最大20*20的格盘,和一条长为l的蛇,目的是使蛇头移动到(1,1)。格盘中存在k个格子是无法通过的石头,蛇也不能碰到自己的身体,包括最尾的一格。若能到(1,1),输出最短距离,否则输出-1。

考虑保存蛇的状态时,只保存其蛇头位置,以及指向之前蛇头的指针。由此就能搜索处理蛇的移动方案。考虑判重时,使用滚动hash,即到一个新状态时,将之前蛇头对应的hash值升位并减去之前蛇尾的部分,再加上新的蛇头值即可。

另外就是,可以考虑优先向(1,1)的方向移动,以及搜索之前先判断蛇头是否可达(1,1)。