dfs奇偶剪枝 HDU 1010

2022-06-27 15:06:11 字數 1101 閱讀 8797

題意:問小狗是否能在第t秒(走t步)從s點到達d點

思路:很明顯的一道dfs題目,但是我們這裡需要採用剪枝減少不必要的路,另外這裡的地圖是字元,我們輸入需要注意吸收換行符

另外如果找到了答案,我們用全域性變數把它標記,只要它找到了答案,後面的操作不用進行

#include#include

#include

#include

#include

using

namespace

std;

char c[10][10

];int fx[4][2]= ,,,};

int t,flag=0

;int

n,m,ffx,ffy;

void dfs(int s,int e,int

step)

if(flag==1) //

表示後面都不需要進行下去

return

;

/*寫法二

if(s==ffx&&e==ffy&&step==t)

*/if(s<0||e<0||s>=n||e>=m)

return

;

int ans=t-step-abs(ffx-s)-abs(ffy-e); //

奇偶剪枝

if(ans<0||ans&1

)

return

;

for(int i=0; i<4; i++)

}}int

main()

if(c[i][j]=='d'

)

}getchar();

//吸收換行符

}

int step=0

; flag=0

; c[s][e]='x'

; dfs(s,e,step);

if(flag==1

) cout

<<"

yes"

cout

<<"no"

<}

}

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...

hdu1010迷宮搜尋 奇偶剪枝

n m t 4 4 5 s為起點,能否恰好t步走到d,x是牆,s.x.直接搜尋超時,根據曼哈頓距離可以排除一些情況,x.易知起點到終點的最短距離為兩點曼哈頓距離,xd 則若計算的距離大於最短距離,距離之差相當於 走完最短距離又出去走了一段又回來,一定是偶數 no3 4 5 s.x.x.d 0 0 0...