DFS之奇偶性剪枝
阿新 • • 發佈:2019-01-02
奇偶剪枝
【問題描述:】
給定一個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.
下面給出一道例題: