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

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

HDOJ(HDU).1016 Prime Ring Problem (DFS)

2019-11-11 06:55:48
字體:
來源:轉載
供稿:網友

HDOJ(HDU).1016 PRime Ring Problem (DFS) [從零開始DFS(3)]

從零開始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,要求將1-n的數字填成素數環,即相鄰2個數字的和為素數,按字典序依次輸出所有可能的組合。并且題目說過所有的組合開頭均為1。

哎呀這題太熟悉了,又是填數字的題目,似曾相識的感覺。 討論過的填數字的題目,傳送門:

HDOJ(HDU).1342 Lotto [從零開始DFS(0)] HDOJ(HDU).1015 Safecracker [從零開始DFS(2)]

如果獨立完成了幾道dfs的題目,就會發現:其實dfs只是工具,真正考察思維的,是什么時候進行dfs,怎樣進行dfs

1.什么時候進行dfs:即遞歸邊界。滿足何種情況就不進行搜索了,或者何種情況進行一個輸出,亦或是利用條件判斷去掉重復的情況。 2.怎樣進行dfs:是二重搜索(HDOJ.1342),還是四向搜索(HDOJ.1010),還是在數組中找遍所有的元素(HDOJ.1015)。也許以后還有八向搜索,全部搜索等等方式。

不難發現本題要求的是,兩個相鄰的數字和為素數,那么也就是在每次搜索的時候,都判斷一下前2個數字的和是否為素數,若是的話繼續進行搜索,否則終止。

需要注意的是,最后還需要判斷一下,最后一個數字和第一個數字的和是否為素數,因為題目的要求是素數環嘛。否則會出現多解。

為了方便判斷素數,最好在初始化的時候進行素數篩。規模在50即可(n上限是19,最大就是19+18=37)。

上代碼。

代碼總覽

/* HDOJ.1016 Author:pengwill Date:2017-2-5*/#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;bool visit[21],prime[51];int b[21],n;void init(){ // prime 0 & not prime 1 for(int i = 2; i<=sqrt(50) ;++ i) if(prime[i] == 0){ for(int j = 2;i*j<=50;++j) prime[i*j] = 1; } prime[1] = 0; visit[1] = true;b[1] = 1;}bool check(int depth){ if(depth == n+1)//對于最后要判斷首位數字的和是否為素數 if(prime[b[1]+b[depth-1]] == 0 && prime[b[depth-2]+b[depth-1]] == 0) return true; else return false; else if(prime[b[depth-2]+b[depth-1]] == 0) return true;//若不是最后就直接判斷前2個即可 else return false;}void print(){ for(int i = 1;i<=n; ++i) if(i == 1) printf("%d",b[i]); else printf(" %d",b[i]); printf("/n");}void dfs(int depth){ if(false == check(depth)) return; if(depth == n+1){ //輸出 print(); return; } for(int i = 2; i<=n ;++i){ if(!visit[i]){ visit[i] = 1; b[depth] = i; dfs(depth+1); visit[i] = 0; } }}int main(){ int t = 1; init(); while(scanf("%d",&n) != EOF){ printf("Case %d:/n",t++); if(1==n) printf("1/n"); else dfs(2);//第一位是1,故從深度為2開始dfs printf("/n"); } return 0;}

對n為1的時候進行特判。 init函數打50規模的素數表,然后把1置為訪問過。若n不為1,對深度為2進行dfs。 每次在遞歸調用dfs之前,首先檢查一下前邊2個數的和(depth-1和depth-2)是否為素數。(因為b[0]為0,當depth為2的時候也可以直接調用check函數,不用特判)。需要注意的是,當depth為n+1的時候,check需要檢查兩項內容:一是剛才說的前兩個數的和是否為素數,二是最后一個數和第一個數的和是否為素數。這樣就能保證是素數環了。

本題還有一個坑點,就是輸出格式。輸出可能組合的時候注意是每個數字之間有一個空格,也就是在行末尾只有一個換行符。題目還說了在每種case之后輸出個空行,也就是說不是每組數據之間(原文表述是 Print a blank line after each case. 是after,不是between)。 所以最后還是有一個空行的。

此題不難,dfs活學活用才是王道?。?!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频一二三| 国色天香2019中文字幕在线观看| 亚洲最大成人免费视频| www国产亚洲精品久久网站| 欧美国产高跟鞋裸体秀xxxhd| 精品国产一区二区三区在线观看| 欧美日韩国产综合视频在线观看中文| 日韩亚洲综合在线| 国内精品一区二区三区四区| 国内精品久久久久伊人av| 亚洲影视中文字幕| 日韩成人中文字幕在线观看| 国产成人精品999| 欧美日韩成人免费| 国产精品久久久久久久久免费| 成人xvideos免费视频| 日韩欧美国产视频| 亚洲男女自偷自拍图片另类| 粉嫩老牛aⅴ一区二区三区| 欧美丰满老妇厨房牲生活| 欧美极品欧美精品欧美视频| 2020久久国产精品| 夜夜躁日日躁狠狠久久88av| 国产精品都在这里| 国产精品成人av性教育| 成人在线播放av| 97视频在线观看视频免费视频| 国产日韩精品在线播放| 永久免费精品影视网站| 热re91久久精品国99热蜜臀| 91精品国产乱码久久久久久蜜臀| 日韩av在线免费观看一区| 4438全国亚洲精品在线观看视频| 欧美精品久久久久久久久久| 国产精品激情自拍| 亚洲国产91精品在线观看| 奇门遁甲1982国语版免费观看高清| 成人免费福利视频| 精品爽片免费看久久| 性日韩欧美在线视频| 正在播放亚洲1区| 日韩欧美一区视频| 国产精品自产拍在线观看| 久久精品久久精品亚洲人| 亚洲免费伊人电影在线观看av| 亚洲精品久久久久中文字幕欢迎你| 日韩乱码在线视频| 久久夜色精品亚洲噜噜国产mv| 一区二区三区四区视频| 亚洲欧美日韩一区二区三区在线| 色老头一区二区三区| 久久久久久久影院| 中文字幕亚洲情99在线| 欧美成人一区二区三区电影| 国产精品69av| 国产精品美女久久久久av超清| 欧美电影免费观看电视剧大全| 欧美精品激情blacked18| 亚洲国产精品人久久电影| 日韩中文字幕视频在线| 日韩精品中文字幕久久臀| 国产精品亚洲美女av网站| 成人网中文字幕| 日韩在线视频网站| 91色精品视频在线| 国产成人一区二| 国产精品88a∨| 91av视频导航| 亚洲二区在线播放视频| 在线播放国产精品| 欧洲成人免费视频| 久久激情视频免费观看| 欧美整片在线观看| 欧美日韩中国免费专区在线看| www.久久久久久.com| 欧美午夜丰满在线18影院| 成人激情在线播放| 国产精品小说在线| 亚洲美女性生活视频| 久久久久九九九九| 日韩亚洲第一页| 亚洲欧洲一区二区三区久久| 少妇激情综合网| 欧美一区二区三区免费视| 日本亚洲欧美三级| 欧美xxxx综合视频| 97精品久久久| 欧美综合一区第一页| 久久97精品久久久久久久不卡| 国产激情999| 亚洲激情在线观看| 国产精品第七影院| 亚洲第一av网| 亚洲国产高潮在线观看| 亚洲自拍偷拍色片视频| 日韩小视频网址| 国产成人精品a视频一区www| 欧美一区二区三区艳史| 欧美在线国产精品| 综合欧美国产视频二区| 国产精品伦子伦免费视频| 久久精品亚洲热| 欧美高跟鞋交xxxxxhd| 色香阁99久久精品久久久| 亚洲女人天堂av| 91色视频在线观看| 国产精品视频久久| 亚洲日韩欧美视频一区| 欧美国产日韩一区| 欧美黑人又粗大| 久久91亚洲精品中文字幕| 成人精品福利视频| 97在线看免费观看视频在线观看| 成人免费看片视频| 日韩美女中文字幕| 久久久久久国产精品三级玉女聊斋| 成人乱人伦精品视频在线观看| 精品久久久久久久久久久久| 欧美日韩国产精品一区二区不卡中文| 欧美极品在线视频| 国产精品久久久久不卡| 亚洲人成伊人成综合网久久久| 91精品视频免费| 国产日韩精品视频| 91精品久久久久久久久| xvideos亚洲人网站| 国产裸体写真av一区二区| 日本久久久久久| 中文字幕一区二区三区电影| 亚洲级视频在线观看免费1级| 亚洲免费视频一区二区| 国产一区二区丝袜| 91精品国产自产在线观看永久| 国内精品伊人久久| 欧美视频13p| 日产精品99久久久久久| 日韩久久午夜影院| 欧美刺激性大交免费视频| 欧洲美女免费图片一区| 国内精品美女av在线播放| 国产免费观看久久黄| 色与欲影视天天看综合网| 日韩视频在线观看免费| 成人在线免费观看视视频| 亚洲最大在线视频| 伊人伊成久久人综合网站| 亚洲精品免费av| 精品美女久久久久久免费| 成人精品在线观看| 欧美大片免费看| 成人黄色短视频在线观看| 国内精品视频久久| 国产香蕉精品视频一区二区三区| 久久影视电视剧免费网站| 欧美激情视频网站| 国产成人免费91av在线| 欧美黄色小视频| 国产在线视频欧美| 97视频在线观看网址| yellow中文字幕久久| 国内免费久久久久久久久久久| 久久久久国产精品一区| 日韩成人小视频| 亚洲精品91美女久久久久久久|