DFS所用到的奇偶剪枝

2021-06-29 02:26:03 字數 1268 閱讀 3541

把矩陣看成如下形式: 

0 1 0 1 0 1 

1 0 1 0 1 0 

0 1 0 1 0 1 

1 0 1 0 1 0 

0 1 0 1 0 1 

從為 0 的格仔走一步,必然走向為 1 的格仔 。

從為 1 的格仔走一步,必然走向為 0 的格仔 。

即: 從 0 走向 1 必然是奇數步,從 0 走向 0 必然是偶數步。

所以當遇到從 0 走向 0 但是要求時間是奇數的或者 從 1 走向 0 但是要求時間是偶數的,都可以直接判斷不可達!

比如有一地圖:

[c-sharp]view plain

copy

s...  

....  

....  

....  

...d  

要求從s點到達d點,此時,從s到d的最短距離為s = abs ( dx - sx ) + abs ( dy - sy )。

如果地圖中出現了不能經過的障礙物:

[c-sharp]view plain

copy

s..x  

xx.x  

...x  

.***  

...d  

此時的最短距離s' = s + 4,為了繞開障礙,不管偏移幾個點,偏移的距離都是最短距離s加上乙個偶數距離。

就如同上面說的矩陣,要求你從0走到0,無論你怎麼繞,永遠都是最短距離(偶數步)加上某個偶數步;要求你從1走到0,永遠只能是最短距離(奇數步)加上某個偶數步。

例題:zoj problem set - 2110 tempter of the bone

題目意思是講有乙隻狗要吃骨頭,結果進入了乙個迷宮陷阱,迷宮裡每走過乙個地板費時一秒,該地板 就會在下一秒塌陷,所以你不能在該地板上逗留。迷宮裡面有乙個門,只能在特定的某一秒才能開啟,讓狗逃出去。現在題目告訴你迷宮的大小和門開啟的時間,問你狗可不可以逃出去,可以就輸出yes,否則no。

搜尋時要用到的剪枝:

1.如果當前時間即步數(step) >= t 而且還沒有找到d點,則剪掉。

2.設當前位置(x, y)到d點(dx, dy)的最短距離為s,到達當前位置(x, y)已經花費時間(步數)step,那麼,如果題目要求的時間t - step < s,則剪掉。 3.

對於當前位置(x, y),如果,(t-step-s)是奇數,則剪掉(奇偶剪枝)。

4.如果地圖中,可走的點的數目(xnum) < 要求的時間t,則剪掉(路徑剪枝)。

hdu 1010 dfs,奇偶剪枝

背景 熟悉dfs,第一次遇見了剪枝,各種剪枝。奇偶剪枝 開始一直超時,用了奇偶剪枝之後瞬間優化到312ms。對於乙個沒有障礙的圖,起點 s 到終點 的理想最短路徑是 而如果中間有障 礙物的話,路徑是在理想最短路徑上加上乙個偶數 可以證明 這樣可以看來,任何路徑和理想最短路徑是同奇偶的。這樣就可以剪去...

HDU1010 奇偶剪枝 DFS

第一次做剪枝的題目,剪枝,說實話研究的時間不短。好像沒什麼實質性的進展,遇到題目。絕對有會無從下手的感覺,剪枝越來越神奇了。hdu1010一道剪枝的經典題目,自己當初想用bfs過。提交了10幾遍wa,後來查了是剪枝最終死心了 ps 第一次寫剪枝題目,用了乙個模擬地圖來做奇偶性的判定條件進行剪枝,大牛...

HDU1010 奇偶剪枝 dfs)

the doggie found a bone in an ancient maze,which fascinated him a lot.however,when he picked it up,the maze began to shake,and the doggie could feel t...