HDU 1010 深度搜尋問題

2021-07-09 20:55:12 字數 1069 閱讀 9878

杭電acm 1010

題意 :

能否在 恰好t步時 從s點到達 d點,每個點只能走一次,x是障礙。

注意不能提前到達,必須在t步時到達

我用的深度搜尋dfs,最重要的是超時問題。

這裡涉及到乙個剪枝,我在網上看到的奇偶剪枝。

m * n的 {0,1} 矩陣

0,1,0,1,0

1,0,1,0,1

0,1,0,1,0

1,0,1,0,1

可以看到從任意乙個0到任意乙個1,或者從任意乙個1到任意乙個0,都需要奇數步,如果程式剩下的步數為偶數,此時可以直接return 了。

同理,從任意乙個0到任意乙個0,或者從任意乙個1到任意乙個1,都需要偶數步。

#include

#include

#include

int n, m, t;

int flag, dx, dy, sx, sy;

char **map;

void dfs(int sx, int sy, int count)

if(flag == 1)

return ;

if((sx + sy) % 2 == (dx + dy) % 2) //進行奇偶剪枝

else

if(count == t && (sx != dx || sy != dy))

return;

int i;

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

}}int main()

else

if(map[i][j] == 'd')

else

if(map[i][j] == '.')

count ++;

}getchar();

}if(count >= t)

dfs(sx,sy,0);

if(flag == 1)

puts("yes");

else

puts("no");

}return

0;}

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

hdu 1010 深搜 回溯

也不想解釋了,只是做來找回做題的感覺。遲d出個這方面的小總結,越來越發現對所學知識作總結的重要性了 1010tempter of the bone include includeint n,m,time int xs,ys,xd,yd int direc 4 2 char str 11 11 boo...

HDU1010 奇偶剪枝 DFS

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