題目描述: 判斷在指定時間內dog是否能從制定開始位置走到制定結束位置。每走一步需要花費乙個單位時間(秒).題目涉及奇偶剪枝及dfs
演算法描述: 先判斷在哪些條件下不可達,即找出所有可能的剪枝,然後從當前位置的四個方向分別回溯,找出到達制定門的最短路徑
演算法**如下:
#include #includeusing
namespace
std;
typedef
struct
cord
point;
point sp,ep;
//sp:coordinate of start position,ep:coordinate of end position(door)
const
int max=7
;char
map[max][max];
bool bflag = false
;int
numwall;
int dir[4][2]=,,,};
intn,m,t;
int dis(point &p1, point &p2)
void dfs(point startp,int
t)
else
return
; }
else}}
}int
main()
else
if(map[i][j] =='d'
)
else
if(map[i][j] =='x'
) numwall++;}}
if(n*m-numwall > t && dis(sp,ep) <= t) //
基本剪枝
if(bflag)
cout
<<"
yes"
cout
<<"no"
<}
return0;
}
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...