亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

HDOJ(HDU).1045 Fire Net (DFS)

2019-11-10 17:10:17
字體:
來源:轉載
供稿:網友

HDOJ(HDU).1045 Fire Net [從零開始DFS(7)]

點我挑戰題目

從零開始DFS HDOJ.1342 Lotto [從零開始DFS(0)] — DFS思想與框架/雙重DFS HDOJ.1010 Tempter of the Bone [從零開始DFS(1)] —DFS四向搜索/奇偶剪枝 HDOJ(HDU).1015 Safecracker [從零開始DFS(2)] —DFS四向搜索變種 HDOJ(HDU).1016 PRime Ring Problem (DFS) [從零開始DFS(3)] —小結:做DFS題目的關注點 HDOJ(HDU).1035 Robot Motion [從零開始DFS(4)]—DFS題目練習 HDOJ(HDU).1241 Oil Deposits(DFS) [從零開始DFS(5)] —DFS八向搜索/雙重for循環遍歷 HDOJ(HDU).1258 Sum It Up (DFS) [從零開始DFS(6)] —DFS雙重搜索/去重技巧 HDOJ(HDU).1045 Fire Net [從零開始DFS(7)]—DFS練習/check函數的思想

題意分析

給出n * n 規模的地圖,其中.代表空白區域,X代表墻,求出在滿足以下規則的情況下,最多能建立多少座炮樓。 規則: 1.假定炮樓可以四向發射炮彈,要求2個炮樓不能互相打到。(射程無限制) 2.墻可以攔截住炮彈。

相比于之前的dfs題目,本道題的限制要求頗為復雜,首先要求不能互相打到,直觀的感覺就是2個炮樓不能處在同一水平/豎直線上。其次要求墻可以攔截子彈,也就是說2個炮樓可以在一條水平/豎直線上的要求就是當且僅當他們中間有墻分隔。 不難從地圖中看出,每一個空白的格子均有可能建炮樓(題目中也說了最大個數一定,但位置有可能有多解)。所以可以確定要遍歷整張地圖,即判斷每個格子是否滿足建炮樓的條件,會用到HDOJ(HDU).1241 Oil Deposits(DFS) [從零開始DFS(5)] 討論過的雙重for循環遍歷整張地圖。 回到dfs的核心:遞歸。這道題有沒有遞歸邊界呢?首先由于是對地圖進行for循環遍歷,也就不會出現越界的情況,越界不會是遞歸邊界。其次這道題要求找出數量的最大值,于是在dfs中肯定會有更新最大值的部分。什么時候進行遞歸呢?當然就是滿足題目所說的建立炮樓的規則的時候。 推算到此,可見難點是如何實現這樣規則的檢查。

繼續看如何實現。按照規則,水平/豎直不能有其他的炮樓出現,不難想到,用for循環分別對上下左右四個方向檢查,如果遇到炮樓,則說明這個位置不符合規則,返回false,或者是超越了地圖邊界,退出循環,再或者是遇到了 退出當前循環。 為什么遇到墻就跳出循環了呢? 也不難想到,就算墻后面是炮樓,也是符合規則的,所以干脆遇到墻就跳出循環。 整個程序的架構基本就是這樣,下面結合代碼,討論一些小問題。

代碼總覽

/* Title:HDOJ.1045 Author:pengwill Date:2017-2-9*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char mp[5][5];int visit[5][5];int n,ans;void init(){ ans = 0; memset(visit,0,sizeof(visit)); for(int i = 0 ;i< n;++i) for(int j = 0;j <n; ++j){ if(mp[i][j] == 'X') visit[i][j] = 2; }}bool check(int x, int y){ if(x<0 || x>=n || y<0 || y>=n) return false; else return true;}bool recheck(int x, int y){ if(visit[x][y] == 2 ) return false; //right for(int i = x;check(i,y);++i){ if(visit[i][y] == 2) break; if(visit[i][y] == 1) return false; } //left for(int i = x;check(i,y);--i){ if(visit[i][y] == 2) break; if(visit[i][y] == 1) return false; } //up for(int i = y;check(x,i);++i){ if(visit[x][i] == 2) break; if(visit[x][i] == 1) return false; } //down for(int i = y;check(x,i);--i){ if(visit[x][i] == 2) break; if(visit[x][i] == 1) return false; } return true;}void dfs(int num){ if(num>ans) ans = num; for(int i = 0;i<n;++i){ for(int j = 0;j<n;++j){ if(recheck(i,j)){ visit[i][j] = 1; dfs(num+1); visit[i][j] = 0; } } }}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d",&n)&&n){ for(int i = 0;i<n;++i) scanf("%s",mp[i]); init(); dfs(0); printf("%d/n",ans); } return 0;}

init函數完成初始化,地圖中的墻標記為2(之后建立的炮樓標記為1,沒有訪問過就是0);然后進入dfs函數,dfs里面先是更新最大值的部分,然后是是雙重for循環。當且僅當此點滿足recheck時進行遞歸操作,recheck就是上下左右檢查有沒有炮樓,當然,如果這點本身就是墻的話,直接return false。 如果滿足的話,把這點標記為炮樓(visit[i][j] = 1),繼續遞歸調用dfs,當然不要忘記無后效性(visit[i][j] = 0)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产婷婷97碰碰久久人人蜜臀| 亚洲一区二区自拍| 国产精品成人免费视频| 日韩在线观看视频免费| 欧美另类精品xxxx孕妇| 国产精品成人品| 国产日韩欧美中文在线播放| 成人免费xxxxx在线观看| 欧美黑人视频一区| 久久成人18免费网站| 国产精品久久久久久久久久| 国产一区二中文字幕在线看| 中文字幕综合在线| 久久精品国产久精国产一老狼| 国产精品视频一区国模私拍| 久久天天躁狠狠躁老女人| 国产成人精品999| 国产精品91一区| 136fldh精品导航福利| 日韩影视在线观看| 琪琪第一精品导航| 色婷婷综合久久久久中文字幕1| 在线视频国产日韩| 韩日欧美一区二区| 精品人伦一区二区三区蜜桃网站| 91牛牛免费视频| 国产精品综合网站| 亚洲成人激情图| 亚洲天堂第二页| 亚洲精品国产免费| 欧美特黄级在线| 国内精品久久久久久中文字幕| 一区二区成人av| www.99久久热国产日韩欧美.com| 91高潮精品免费porn| 欧美三级免费观看| 综合久久五月天| 久久精品一区中文字幕| 不卡在线观看电视剧完整版| 国产精品美女www爽爽爽视频| 精品国产区一区二区三区在线观看| 91黑丝高跟在线| 午夜精品久久久99热福利| 精品日韩视频在线观看| 久久成人这里只有精品| 欧美色xxxx| 97在线精品视频| 欧洲精品久久久| 色综合久久中文字幕综合网小说| 亚洲美女在线视频| 欧美成人免费网| 91视频88av| 亚洲欧洲在线观看| 欧美在线观看网址综合| 精品在线欧美视频| 日韩中文在线中文网在线观看| 九九综合九九综合| 国产+成+人+亚洲欧洲| 国外成人在线直播| 日韩欧美在线中文字幕| 人人做人人澡人人爽欧美| 日韩在线视频网| 亚洲欧美中文字幕在线一区| 国产精品观看在线亚洲人成网| 国产精品成人免费视频| 亚洲乱亚洲乱妇无码| 懂色av一区二区三区| 日韩精品中文在线观看| 欧美黑人一级爽快片淫片高清| 欧美午夜片欧美片在线观看| 中文字幕在线看视频国产欧美| 欧美精品18videos性欧| 欧美视频在线观看 亚洲欧| 久久国产精品久久久久久| 浅井舞香一区二区| 色妞在线综合亚洲欧美| 亚洲午夜精品久久久久久久久久久久| 日韩精品视频在线| 亚洲天堂精品在线| xvideos成人免费中文版| 国产婷婷97碰碰久久人人蜜臀| 日韩欧美亚洲成人| 亚洲精品久久久久久久久久久久久| 亚洲国产99精品国自产| 国产成人精品久久二区二区91| 国产欧美久久久久久| 欧美在线视频免费播放| 欧美日韩成人在线视频| 91在线视频一区| www.欧美三级电影.com| 亚洲最大中文字幕| 91免费电影网站| 国产一区二区精品丝袜| 国产成人激情小视频| 欧美日韩另类字幕中文| 成人伊人精品色xxxx视频| 日韩av免费在线| 欧美激情图片区| 成人黄色短视频在线观看| 亚洲伊人成综合成人网| 日本一欧美一欧美一亚洲视频| 国产成人精品午夜| 国产97人人超碰caoprom| 久久精品国产亚洲精品2020| 性欧美亚洲xxxx乳在线观看| 久久久综合免费视频| 精品国产鲁一鲁一区二区张丽| 亚洲精品国产成人| 国产精品久久久久久超碰| 国产免费一区二区三区在线观看| 日韩中文在线视频| 91精品国产综合久久久久久久久| 少妇高潮久久久久久潘金莲| 日韩中文字幕在线播放| 日韩成人在线电影网| 国产视频精品自拍| 国产精品吴梦梦| 不卡av在线网站| 欧美日韩国产一区二区三区| 欧美疯狂做受xxxx高潮| 欧美日韩福利在线观看| 91免费精品视频| 亚洲美女av网站| 欧美精品videosex性欧美| 中文字幕亚洲欧美日韩2019| 欧美在线中文字幕| 国产成人高清激情视频在线观看| 亚洲国产精品美女| 国产精品欧美一区二区三区奶水| 亚洲黄色在线观看| 亚洲精品中文字| 亚洲精品国产精品国产自| 亚洲视频第一页| 91免费在线视频网站| 国产精品私拍pans大尺度在线| 欧美日韩黄色大片| 91成人在线播放| 国产香蕉一区二区三区在线视频| 91精品国产自产在线观看永久| 日韩激情第一页| 日韩高清免费在线| 成人av色在线观看| 亚洲国产成人精品久久久国产成人一区| 91中文在线视频| 国产成人+综合亚洲+天堂| 成人激情视频小说免费下载| 国产啪精品视频| 欧美专区中文字幕| 国产精品av在线播放| 亚洲第一二三四五区| 日韩人在线观看| 欧美日韩国产丝袜美女| 91国内精品久久| 久久久久久久影视| 国产精品高潮在线| 精品国产乱码久久久久酒店| 成人黄色免费网站在线观看| 欧美日产国产成人免费图片| 一级做a爰片久久毛片美女图片| 91久久国产婷婷一区二区| 国产精品久久久久久久久久久久久| 亚洲精品国产精品久久清纯直播| 日韩亚洲第一页| 亚洲成人精品视频在线观看|