DFS專攻 HDU 1010 DFS 奇偶剪枝)

2021-06-19 12:19:55 字數 594 閱讀 7561

這周專攻的第一道dfs終於領會了……繼續努力!

剪枝的目的就是要省時……

#include#include#include#include#include#include#include#include#include#include#include#define mem(a,b) memset(a,b,sizeof(a))

typedef long long ll;

using namespace std;

int n,m,t,xx,yy,k,d[4][2]=,,,};

char map[10][10];

void dfs(int x,int y,int tt)

return;

}int tem=abs(x-xx)+abs(y-yy)-abs(tt-t); //所走步數與奇偶剪枝的判斷式

if(tem>0||tem&1) return; //步長如果大於剩餘的步長肯定不會在特定的步數走到啦;然後奇數的剪掉。

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

{int x2=x+d[i][0];

int y2=y+d[i][1];

if(x2>=0&&x2=0&&y2

hdu 1010 dfs,奇偶剪枝

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

HDU1010(DFS遍歷所有情況 奇數偶數剪枝)

include include include include includeusing namespace std const int maxn 10 bool vis maxn maxn bool flag int tem int n,m,t,di,dj,wall,si,sj int step ...

HDU1010 奇偶剪枝 DFS

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