您的位置:首页 > 其它

2965 宽搜 + 剪纸 + 位操作

2011-03-20 11:53 127 查看
这到题和1753差不多,但是游戏的操作不一样了。每次操作是将相应位置的行列进行倒转,并且要求打印路径。

这到题卡了很多地方,一开始是位操作的时候,对同一个位置做了两次异或操作,导致那个位置的值没有改变。题目要求打印路径,这个不难,宽搜打印路径只要每个子节点记录其父亲就可以了。代码改得差不多之后,提交却一直超时,后来看了一下别人的代码,才知道这到题与1753不一样,得需要剪枝。我以为状态很少,最多只有65536个状态。但是我错在了对每一个状态,都生成他的16个儿子,然后去看其是否已经出现过,那这样就相当于65536*16的复杂度了。看了别人的剪枝,他是在父节点求子节点的时候,子节点的计算从父节点计算的位置的下一个位置开始。其实这个优化是很正确的。假如当前的节点操作是第2个位置,那么子节点就可以从第3个节点开始操作了,如果是从第一个节点开始,那么操作顺序就是2、1,但这个操作与1、2的结果是完全一样的,在求1的时候已经计算过这个可能了,这样就没有必要再重复计算。这样剪纸之后,复杂度就降低了好多好多,我也不懂表到了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: