日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 1010 Tempter of the Bone heuristic 修剪

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 1010 Tempter of the Bone heuristic 修剪 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

的問題是,在測試修剪。

應該說是更先進的應用。

由于使用的heuristic(經驗)修剪。總結這方面的經驗法則,別easy。我說,這也是由于先進的在線報告中的應用程序沒有分析太多太好的解決這個問題,計劃給也很慢,只有失去了。從這個很多人不這樣做的問題。


這里我須要更正一下網上流行的說法:奇偶剪枝法。

事實上本題使用奇偶剪枝法并不能太大提快速度,只能說只讓使用奇偶剪枝過掉。

所以網上說本題使用奇偶剪枝的,事實上并不能提快速度。

原因:

奇偶剪枝僅僅能剪枝一次,不能在遞歸的時候剪枝,由于僅僅要初始化位置符合奇偶性,那么之后的隨意方格都會符合奇偶性。

故此理論上也是不能提快速度的。當然本人也實驗過多次。證實奇偶剪枝至少對本題來說用處不大。


本題的主要剪枝法應該是一條: 最大空格數和步數比較。就是說假設生下的空格數位grids。而須要走T步,grids < T的時候,就能夠判定為NO了。

當然還有第二條剪枝:假設當前位置到目標位置最少須要steps步。而須要走T步,那么steps > T,就能夠判定為NO了。

只是事實證明僅僅須要使用第一個剪枝法就能夠了。

第二條剪枝用處也不大,原因:遞歸的格子非常少。計算距離差并不能提高多少速度。


如我以下遞歸循環中僅僅使用一條主要剪枝就足夠了,不超100ms。盡管沒有做到0ms,只是速度已經是夠快的了。

0ms預計須要進一步的剪枝。有大牛,請不吝賜教一下。有空要深入研究一下A*算法才行了。

int sr = 0, sc = 0, dr = 0, dc = 0, n, m, grids, Tsec; vector<string> maze;bool escapeMaze() {if (sr == dr && sc == dc){if (Tsec == 0) return true;return false;}if (grids < Tsec) return false;if (Tsec == 0) return false;maze[sr][sc] = '$';grids--; Tsec--;if (sr+1 <(int)maze.size() && maze[sr+1][sc] == '.'){sr++;if (escapeMaze()) return true;sr--;}if (sc+1 < (int)maze[0].size() && maze[sr][sc+1] == '.'){sc++;if (escapeMaze()) return true;sc--;}if (sc > 0 && maze[sr][sc-1] == '.'){sc--;if (escapeMaze()) return true;sc++;}if (sr > 0 && maze[sr-1][sc] == '.'){sr--;if (escapeMaze()) return true;sr++;}maze[sr][sc] = '.';grids++; Tsec++;return false; }int main() {while (scanf("%d %d %d", &n, &m, &Tsec) && n){grids = n * m - 1;maze.clear(); maze.resize(n);for (int i = 0; i < n; i++){cin>>maze[i];for (int j = 0; j < m; j++){if (maze[i][j] == 'S') sr = i, sc = j; //別忘記了這里是'S'else if (maze[i][j] == 'D') dr = i, dc = j, maze[i][j] = '.';else if (maze[i][j] == 'X') grids--;}}int t = Tsec - (abs(dr - sr) + abs(dc-sc));if (t < 0 || (t & 1) || grids < Tsec) puts("NO");else if (escapeMaze()) puts("YES");else puts("NO");}return 0; }


版權聲明:筆者靖心臟,景空間地址:http://blog.csdn.net/kenden23/,只有經過作者同意轉載。

總結

以上是生活随笔為你收集整理的HDU 1010 Tempter of the Bone heuristic 修剪的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。