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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU1010:Tempter of the Bone(dfs+剪枝)

發布時間:2024/9/5 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU1010:Tempter of the Bone(dfs+剪枝) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.hdu.edu.cn/showproblem.php?pid=1010?? //題目鏈接

http://ycool.com/post/ymsvd2s//一個很好理解剪枝思想的博客

http://blog.csdn.net/chyshnu/article/details/6171758//一個很好舉例的博客

?

Problem Description 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 the ground sinking. He realized that the bone was a trap, and he tried desperately to get out of this maze.

The maze was a rectangle with sizes N by M. There was a door in the maze. At the beginning, the door was closed and it would open at the T-th second for a short period of time (less than 1 second). Therefore the doggie had to arrive at the door on exactly the T-th second. In every second, he could move one block to one of the upper, lower, left and right neighboring blocks. Once he entered a block, the ground of this block would start to sink and disappear in the next second. He could not stay at one block for more than one second, nor could he move into a visited block. Can the poor doggie survive? Please help him. Input The input consists of multiple test cases. The first line of each test case contains three integers N, M, and T (1 < N, M < 7; 0 < T < 50), which denote the sizes of the maze and the time at which the door will open, respectively. The next N lines give the maze layout, with each line containing M characters. A character is one of the following:

'X': a block of wall, which the doggie cannot enter;?
'S': the start point of the doggie;?
'D': the Door; or
'.': an empty block.

The input is terminated with three 0's. This test case is not to be processed.
Output For each test case, print in one line "YES" if the doggie can survive, or "NO" otherwise. Sample Input 4 4 5 S.X. ..X. ..XD .... 3 4 5 S.X. ..X. ...D 0 0 0 Sample Output NO YES

例題:ZOJ Problem Set - 2110 Tempter of the Bone

題目意思是講有一只狗要吃骨頭,結果進入了一個迷宮陷阱,迷宮里每走過一個地板費時一秒,該地板 就會在下一秒塌陷,所以你不能在該地板上逗留。迷宮里面有一個門,只能在特定的某一秒才能打開,讓狗逃出去。現在題目告訴你迷宮的大小和門打開的時間,問你狗可不可以逃出去,可以就輸出YES,否則NO。

?

搜索時要用到的剪枝:

1.如果當前時間即步數(step) >= T 而且還沒有找到D點,則剪掉。

2.設當前位置(x, y)到D點(dx, dy)的最短距離為s,到達當前位置(x, y)已經花費時間(步數)step,那么,如果題目要求的時間T - step < s,則剪掉。

3. 對于當前位置(x, y),如果,(T-step-s)是奇數,則剪掉(奇偶剪枝)。

4.如果地圖中,可走的點的數目(xnum) < 要求的時間T,則剪掉(路徑剪枝)。

題目解析:

通過做這題算是懂剪枝的思想了,要學奇偶剪枝首先要看懂那個01矩陣(很好理解),之后就沒什么問題了,

剪完枝后大約100ms就過了,怎么說呢,還是了解思想比較重要。

#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> using namespace std; int n,m,t,tx,ty,flag; char map[8][8]; int v[8][8]; int jx[]= {1,-1,0,0}; int jy[]= {0,0,1,-1}; int Distance ( int x, int y ) {return abs(x - tx )+abs( y - ty ); // 當前點(x,y)到終點(tx,ty)的最短距離 } void dfs(int x,int y,int ans) {if(ans>t) return ;if(x==tx&&y==ty&&ans==t){flag=1;return ;}int dis=t-ans-Distance(x,y);if(dis<0||dis%2) return ;//?剩余步數小于最短距離或者滿足奇偶剪枝條件? for(int i=0; i<4; i++){int xx=x+jx[i];int yy=y+jy[i];if(xx>=0&&xx<n&&yy>=0&&yy<m&&v[xx][yy]==0&&map[xx][yy]!='X'){v[xx][yy]=1;dfs(xx,yy,ans+1);if(flag==1)break;v[xx][yy]=0;}}return ; } int main() {int xx,yy,sum;while(scanf("%d%d%d",&n,&m,&t)!=EOF){flag=sum=0;if(n==0&&m==0&&t==0) break;for(int i=0; i<n; i++){scanf("%*c%s",map[i]);}for(int i=0; i<n; i++){for(int j=0; j<m; j++){v[i][j]=0;if(map[i][j]=='X'){sum++;}else if(map[i][j]=='S'){xx=i;yy=j;v[i][j]=1;}else if(map[i][j]=='D'){tx=i;ty=j;}}}v[xx][yy]=1;if(n*m-sum>t){dfs(xx,yy,0);// 可通行的點必須大于要求的步數,路徑剪枝。 }if(flag==1) printf("YES\n");else printf("NO\n");}return 0; }

?

什么是奇偶剪枝?

把矩陣看成如下形式:
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
從為 0 的格子走一步,必然走向為 1 的格子 。
從為 1 的格子走一步,必然走向為 0 的格子 。
即:
從 0 走向 1 必然是奇數步,從 0 走向 0 必然是偶數步。

所以當遇到從 0 走向 0 但是要求時間是奇數的或者 從 1 走向 0 但是要求時間是偶數的,都可以直接判斷不可達!

?

比如有一地圖:

[c-sharp] view plaincopy
  • S...??
  • ....??
  • ....??
  • ....??
  • ...D??
  • 要求從S點到達D點,此時,從S到D的最短距離為s = abs ( dx - sx ) + abs ( dy - sy )。

    如果地圖中出現了不能經過的障礙物:

    [c-sharp] view plaincopy
  • S..X??
  • XX.X??
  • ...X??
  • .XXX??
  • ...D??
  • 此時的最短距離s' = s + 4,為了繞開障礙,不管偏移幾個點,偏移的距離都是最短距離s加上一個偶數距離。

    就如同上面說的矩陣,要求你從0走到0,無論你怎么繞,永遠都是最短距離(偶數步)加上某個偶數步;要求你從1走到0,永遠只能是最短距離(奇數步)加上某個偶數步。

    ?

    關于奇偶剪枝

    首先舉個例子,有如下4*4的迷宮,'.'為可走路段,'X'為障礙不可通過

    S...
    ....
    ....
    ...D

    從S到D的最短距離為兩點橫坐標差的絕對值+兩點縱坐標差的絕對值 = abs(Sx - Dx) + abs(Sy - Dy) = 6,這個應該是顯而易見的。

    遇到有障礙的時候呢

    S.XX
    X.XX
    ...X
    ...D

    你會發現不管你怎么繞路,最后從S到達D的距離都是最短距離+一個偶數,這個是可以證明的

    而我們知道:

    奇數 + 偶數 = 奇數
    偶數 + 偶數 = 偶數

    因此不管有多少障礙,不管繞多少路,只要能到達目的地,走過的距離必然是跟最短距離的奇偶性是一致的。

    所以如果我們知道從S到D的最短距離為奇數,那么當且僅當給定的步數T為奇數時,才有可能走到。如果給定的T的奇偶性與最短距離的奇偶性不一致,那么我們就可以直接判定這條路線永遠不可達了。

    轉載于:https://www.cnblogs.com/zhangmingcheng/p/3984852.html

    總結

    以上是生活随笔為你收集整理的HDU1010:Tempter of the Bone(dfs+剪枝)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 音影先锋av资源 | 久久久社区 | 污污网站在线 | 日本捏奶吃奶的视频 | 青青草在线观看视频 | a级黄片毛片 | 中文文字幕文字幕高清 | 欧美成人午夜电影 | 69久久 | 黄色av免费播放 | 国产一区二区三区视频免费在线观看 | 日本涩涩网站 | 婷婷丁香综合 | 三上悠亚久久精品 | 操校花视频 | 大尺度叫床戏做爰视频 | 国产女人爽到高潮a毛片 | wwwjavhd| 狠狠爱免费视频 | 欧美日韩国产片 | 久久精品国产成人av | 日韩中文网 | 欧美精品一区二区成人 | 看一级黄色大片 | 99riav视频 | 激情丁香婷婷 | 欧美日韩一区二区在线观看 | 国产精品久久久久久久久免费看 | 人av在线 | 国产午夜精品福利视频 | 99国产精品免费 | 久久国产乱 | 日本不卡在线视频 | 欧美日本色图 | 午夜欧美在线 | 铠甲勇士猎铠 | 91精品国产乱码久久久久 | 久久精品视频日本 | 国产精品久久国产精品 | 日韩av在线一区二区 | 欧美videos另类精品 | 日韩精品一区二区三区在线播放 | 午夜大片网 | 青娱乐在线免费视频 | 亚洲成人av网址 | 亚洲天堂一级片 | 国产欧美精品 | 激情综合五月天 | 久久精品国产大片免费观看 | 亚洲图片小说区 | 免费一级片网址 | 少妇肥臀大白屁股高清 | av一二三| 美女被到爽高潮视频 | 免费在线欧美 | 日本黄色免费视频 | 国产伦精品一区二区三区免费迷 | 偷偷色噜狠狠狠狠的777米奇 | 久久国产成人精品国产成人亚洲 | 不良视频在线观看 | 九九热精品视频在线播放 | 青春草在线视频观看 | 欧美日韩一区精品 | 一级性生活黄色片 | 欧美熟妇另类久久久久久多毛 | 高潮一区二区三区乱码 | 在线免费日韩av | 亚洲操片| 欧美亚洲高清 | 欧美一级久久 | 成年激情网 | 深夜福利91 | 综合色播 | 淫妹妹影院 | 老女人一区 | 亚洲av综合色区无码一二三区 | 伊人情人综合网 | 污视频软件在线观看 | 欧美挤奶吃奶水xxxxx | 久操av在线| 蜜臀久久99精品久久久画质超高清 | 艳母免费在线观看 | 免费观看全黄做爰的视频 | 欧美在线免费观看视频 | 成人短视频在线播放 | jizz在线播放| 国产在线一区二区视频 | 神马午夜激情 | 日韩黄色三级视频 | 欧美狠狠操 | 成人v精品蜜桃久一区 | 久久久久久久久久久久久av | 亚洲a视频在线观看 | 亚洲天堂美女视频 | 欧美精品一二三 | 成人音影 | 少妇2做爰hd韩国电影 | 亚洲男女av | 色婷婷综合久久久中文字幕 |