奇偶剪枝
【问题描述:】
给定一个N*M的迷宫以及起点和终点,迷宫中有一些障碍无法穿过,问能否不重复也不停留地在刚好一共走T步出迷宫。
【问题分析:】
先来看下这张图片:
也就是说当要走偶数步而规定的步数是奇数,或者要走奇数步而规定的步数是偶数,都是不可能到达的,如果要想到达,则要走的步数和规定的步数的奇偶性应该一致。又可知,奇偶性一致的两个数的差或者和都是偶数。(下面有大用处)
例如下图:设S点坐标为(sx,sy),D点坐标为(dx,dy),.表示通路,X表示障碍。
S...
....
....
...D
可知从S走到D的最短距离为abs(sx-dx)+abs(sy-dy);
S..X
..XX
.X.X
...D
上面这个迷宫中存在一些障碍,假设当前已走step步,则还剩下t-step步,设当前点到终点的最短距离为abs(si - dx)+ abs(sj - dy),则两者的奇偶性一定一致的(由上面那段话可知)并且前者一定大于等于后者(剩下要走的步数大于等于该坐标到终点的最短距离),只有这样,才能够到达。也就是tem = t – step – (abs(si - dx)+ abs(sj - dy)),tem >= 0 && tem % 2 == 0.
下面给出一道例题:
http://acm.hdu.edu.cn/showproblem.php?pid=1010