婷婷五色,五月天激情婷婷大综合,亚洲综合久久久久久中文字幕,国产ww久久久久久久久久,婷婷综合缴情亚洲五月伊,欧美日韩不卡在线

首頁 > 生活 >

一步一步地完成題目——費解的開關(C/C++語言)遞推、遞歸、順序思維

前言

本文中博主將一步一步地、以正常人的順序思維完成題目——費解的開關,使用的核心方法是遞推與遞歸。

題目

參考題目:費解的開關

詳細的題目信息相信大家都已經知道了,因此這里為了簡潔只展示輸入輸出格式及數據范圍。


(資料圖片僅供參考)

核心思維

本題利用遞推做的核心思想很簡單,即當這個5x5數組的第一行被處理完過后,想要開啟第一行仍然滅著的燈,則必須點擊該燈的下一行的相同位置。

因此,只要確定好第一行如何選擇,其他行也自然確定了,之需要判斷該種情況是否滿足題目條件即可。

如圖所示:

假設我們第一行只點一次,即被藍色X的地方,點完后會變成這樣:

如果我們想讓第一行的第一個、第四個變亮,那么第二行的第一個、第四個就是必點的。

因此,我們只需要枚舉第一行的所有選法,然后就能遞推出整個四方體的選法,最后判斷成是否成立。

寫出數據輸入格式

首先,先在主函數里寫出題目要求的輸入格式。先輸入一個n,隨后進行n次循環,每次循環都讀入25個數據放在一個二維數組arr里。為了傳參的時候方便,我們把二維數組放在外面,像這樣:

int arr[5][5];int main(){int n = 0;scanf("%d", &n);while (n--){int i = 0;for (i = 0; i < 5; i++){int j = 0;for (j = 0; j < 5; j++){scanf("%1d", &arr[i][j]);}}//...}return 0;}

注意:本題在Acwing上數據輸入時,每個數據之間沒有空格,因此要控制scanf每次讀取數據的寬度。代碼中的“//...”代表接下來從此處開始寫。

枚舉第一行的選擇

這里我們使用遞歸的方法,即在1 ~ 5里面選出1 ~ 5個數,每一種選法都是一種第一行的選擇。創建遞歸函數dfs(int step),step代表當前枚舉的位置,在外面創建數組choose代表遞歸時每個位置的狀態,每次枚舉當前位置選或者不選,五個位置都枚舉結束后就代表形成了一種情況,隨后利用判斷函數jud對這種情況進行判斷。

int main(){//...dfs(0);//dfs的位置}return 0;}
int arr[5][5];int choose[5];void dfs(int step){if (step == 5){jud(choose);return;}//選choose[step] = 1;dfs(step + 1);choose[step] = 0;//不選dfs(step + 1);}

判斷情況是否成立(1)

隨后我們進行判斷函數jud的書寫,為了防止同一組數組不同的情況互相影響,我們創建一個臨時的數組 arr,復制arr的信息到其中,隨后對 arr進行操作。

之后創建i和j,分別用于遍歷行和列。

由于i和j的值不同,點燈還是滅燈的個數也不同(因為有可能在邊界)。因此,我們創建一個函數change,用于改變arr【i】【j】周圍能改變的燈的亮滅情況。

void jud(int* choose){int _arr[5][5];memcpy(_arr, arr, 25 * 4);//對第一行進行操作int i = 0;//用于遍歷行int j = 0;//用于遍歷列for (j = 0; j < 5; j++){if (choose[j] == 1)//相當于arr【0】【j】被選擇了{change(_arr, 0, j);//...}}}

實現亮滅改變函數

羅列情況,改變周圍燈的亮滅情況,如果你不想寫這么多的代碼,也可以把剛開始創建的數組改為7x7大小,就可以不用考慮邊界了。

void change(int _arr[5][5], int i, int j){_arr[i][j] = !_arr[i][j];if (i == 0){_arr[i + 1][j] = !_arr[i + 1][j];if (j == 0){_arr[i][j+1] = !_arr[i][j+1];}else if (j == 4){_arr[i][j-1] = !_arr[i][j-1];}else{_arr[i][j - 1] = !_arr[i][j - 1];_arr[i][j + 1] = !_arr[i][j + 1];}}else if (i == 4){_arr[i - 1][j] = !_arr[i - 1][j];if (j == 0){_arr[i][j + 1] = !_arr[i][j + 1];}else if (j == 4){_arr[i][j - 1] = !_arr[i][j - 1];}else{_arr[i][j - 1] = !_arr[i][j - 1];_arr[i][j + 1] = !_arr[i][j + 1];}}else{_arr[i - 1][j] = !_arr[i - 1][j];_arr[i + 1][j] = !_arr[i + 1][j];if (j == 0){_arr[i][j+1] = !_arr[i][j+1];}else if (j == 4){_arr[i][j - 1] = !_arr[i][j - 1];}else{_arr[i][j - 1] = !_arr[i][j - 1];_arr[i][j + 1] = !_arr[i][j + 1];}}}

判斷情況是否成立(2)

因為對第一行的每一次選擇也算走了一步,所以在每種情況下設置一個變量time,記錄當前走了幾步,一旦time超過6,就立馬return。

注意:第一行只有五個數,因此在第一行的選擇中time不可能超過6,因此不需要在對第一行的選擇中進行判斷。

void jud(int* choose){int _arr[5][5];memcpy(_arr, arr, 25 * 4);int time = 0;//對第一行進行操作int i = 0;//用于遍歷行int j = 0;//用于遍歷列for (j = 0; j < 5; j++){if (choose[j] == 1)//相當于arr【0】【j】被選擇了{time++;change(_arr, 0, j);}}//...//對2,3,4,5行進行操作}

隨后對第2,3,4,5行進行選擇,對第二行的選擇次數,是源于第一行選擇完之后還有幾個滅著的燈。

因此,我們對上一行進行遍歷,如果_arr【i-1】【j】==0,就把time+1,同時點一下_arr【i】【j】。

注意:此時,time已經有可能超過6了,因此需要進行判斷。

void jud(int* choose){int _arr[5][5];memcpy(_arr, arr, 25 * 4);int time = 0;//對第一行進行操作int i = 0;//用于遍歷行int j = 0;//用于遍歷列for (j = 0; j < 5; j++){if (choose[j] == 1)//相當于arr【0】【j】被選擇了{time++;change(_arr, 0, j);}}//...//對2,3,4,5行進行操作for (i = 1; i < 5; i++){for (j = 0; j < 5; j++){if (_arr[i - 1][j] == 0){time++;if (time > 6){return;}change(_arr, i, j);}}}//...}

現在,我們已經對1 ~ 5行全部選擇完畢,但是不確定是否全部都為1,因此需要進行遍歷一次,一旦出現為0的情況,說明這種情況不可取,馬上返回。

//檢測數組中是否全部為1for (i = 0; i < 5; i++){for (j = 0; j < 5; j++){if (_arr[i][j] == 0){return;}}}//...//運行到這里,說明此種方案可行

對輸出數據的處理

題目要求我們輸出所有可行的方案中步數最少的一種所消耗的步數,如果沒有可行方案則返回-1。

因此,我們設置一個全局變量min_time并令其初始化為一個大于6的數,一旦出現一個time小于min_time,就把min_time更新為time。

如果還有更小的time,就能再次更新。

int arr[5][5];int choose[5];int min_time = 10;
//運行到這里,說明此種方案可行min_time = time;return;//...

隨后,我們進行最后的處理。

當dfs(0)結束之后,我們得到了一個min_time,因為它的初始值大于6,所以只要有可行方案存在,該值就一定會被改變,否則,它就依然還是原來的值。

所以,我們設置一個if語句,如果該值為10(初始值),代表沒有可行方案,打印-1后換行。

如果該值不等于10,就打印這個數后換行,代表最小步數為該值。

注意:因為min_time是我們在全局定義的,因此打印完了以后不要忘記再將其重新賦值為10哦。(博主改了很久才想到這一點,TAT)

int main(){int n = 0;scanf("%d", &n);while (n--){int i = 0;for (i = 0; i < 5; i++){int j = 0;for (j = 0; j < 5; j++){scanf("%1d", &arr[i][j]);}}dfs(0);if (min_time == 10){printf("-1\n");}else{printf("%d\n", min_time);min_time = 10;}}return 0;}

感謝您的閱讀與耐心~ 如有錯誤煩請指出~

關鍵詞: 編程算法

責任編輯:Rex_11

推薦閱讀

湖北:開啟文旅新格局

· 2023-02-11 15:47:09

“村界杯”走紅的啟示

· 2023-02-11 15:01:57

關于我們 聯系我們 商務合作 誠聘英才 網站地圖

Copyright @ 2008-2020 www.miyueyun.com.cn Corporation,All Rights Reserved

熱訊新聞網 版權所有 備案號:豫ICP備20005723號-6
文章投訴郵箱:2 9 5 9 1 1 5 7 8@qq.com 違法信息舉報郵箱:jubao@123777.net.cn

營業執照公示信息

特黄熟妇丰满人妻无码| 好吊妞人成视频在线观看强行 | 50岁丰满女人裸体毛茸茸| 人与善交XUANWEN18| 国产精品免费精品自在线观看| 亚洲成AV 人片在线观看无码| 东京热TOKYO综合久久精品 | 任你躁久久精品6| 国产乱人伦无无码视频试看| 野花高清在线观看免费| 久久婷婷五月综合色区| 伊人精品无码AV一区二区三区| 欧美成人片一区二区三区| 夫妻二人体验交换夫妻的后果| 亚洲成AV人片天堂网无码| 免费无码又爽又刺激高潮| 豆国产93在线 | 亚洲| 亚洲国产天堂久久综合网| 久久久久夜色精品国产| 巴西女人与禽2O2O性论交| 色悠久久久久久久综合网| 狠狠躁夜夜躁AV网站中文字幕| 中文字幕无码久久一区| 试看120秒做受小视频免费| 国产免费AV一区二区三区| 永久免费AV无码不卡在线观看| 日韩AV无码一区二区三区不卡毛| 韩国理伦电影午夜三级| 夜夜添无码一区二区三区| 人人妻人人澡人人爽人人| 国产制服丝袜在线无码| 777琪琪午夜理论电影网| 铜铜铜铜铜铜铜铜铜好多深 | 午夜无码免费福利视频网址 | 亚洲成在人线AV品善网好看| 男人女人做爽爽18禁免费| 国产精品久久久久久妇女| 幼儿幼儿幼儿N0UUUUU精品 | wwwxxx日本黄色| 亚洲AV日韩AV高潮喷潮无码| 欧美黑人性暴力猛交喷水黑人巨大| 国产精品日日摸夜夜添夜夜添20 | 亚洲成AV人片乱码色午夜| 欧美性受XXXX88喷潮| 国产在线拍偷自揄拍无码| 99精品无人区乱码1区2区3区| 日韩精品东京热无码视频| 精产国品一二三产区别手机| www.丁香五月| 亚洲国产另类久久久精品黑人| 欧美综合在线激情专区| 韩国精品一区二区无码视频| JAPANESE強姦するAV| 亚洲第一最快AV网站| 全彩十八禁漫画无遮挡| 娇小6一8XXXXX| 插我一区二区在线观看| 亚洲熟妇丰满多毛XXXX| 少妇侧入内射一区二区| 两个病娇男友轮流爱我资源| 国产精华液一线二线三线| 18禁免费无码无遮挡不卡网站| 性少妇SEXVIDEOS高清| 欧美性受XXXX黑人XYX性爽| 几天没C是不是又痒了网站 | 中文字幕精品亚洲一区| 无码国产精品一区二区高潮| 女人被狂躁高潮啊的视频在线看| 国产肉丝袜在线观看| 在公交车上弄到高C了怎么办 | 久久精品亚洲精品无码白云TV| 二男一女一起日B| 中文无码热在线视频| 性──交──性──乱| 人妻无码中文专区久久五月婷| 久久69精品久久久久久HB| 国产成人精品久久综合| 99国产精品久久久久久久成人| 亚洲VA无码VA在线VA天堂| 日本熟妇xxxx| 美女露 0的奶头无| 黑鬼吊太大少妇尖叫| 东京热加勒比无码视频| 18禁无遮挡无码网站免费| 亚洲VA成无码人在线观看| 色窝窝无码一区二区三区色欲| 妺妺窝人体色聚色窝www视频| 国内少妇偷人精品免费| 夫妇联欢会回不去的夜晚| 97色精品视频在线观看| 亚洲欧美日韩、中文字幕不卡| 他将头埋进双腿间吮小核故事| 欧美黑人XXXXXⅩ| 久久精品无码一区二区无码 | 成年黄网站18禁免费观看一区| 在人线AV无码免费高潮喷水| 亚洲AV一二三四区四色婷婷| 视频一区麻豆国产传媒| 欧美精品黑人粗大视频| 久久久久亚洲AV无码尤物| 国产亚洲精品美女久久久| 丁香五月缴情网站| AV天堂永久资源网AV天堂| 亚洲综合久久一区二区| 亚洲AV毛片一区二区三区| 少妇人妻14页_麻花色| 欧美综合自拍亚洲综合图| 老头巨大挺进莹莹的体内免费视频| 国精产品一区二区三区糖心269| 国产成人久久综合一区| 丧尸 湿润 粗大 快感 变异| 免费看黑人强伦姧人妻| 精品国产日韩一区二区三区| 国产精品成人一区二区三区 | 亚洲色丰满少妇高潮18P| 午夜天堂一区人妻| 少妇伦子伦精品无吗| 欧亚成年男女深夜百度网盘 | 狠狠久久亚洲欧美专区| 国产丰满饥渴老女人HD| 成人免费AⅤ视频一区二区| 7777久久亚洲中文字幕蜜桃| 一边做饭一边暴躁怎么办| 亚洲国产AⅤ天堂久久| 无码人妻丰满熟妇区96| 色欲丰满熟妇人妻av一区二区| 欧美香蕉爽爽人人爽| 免费无码AV电影在线观看| 久久精品亚洲精品无码金尊| 狠狠躁夜夜躁无码中文字幕| 国产精品导航一区二区| 妇女性内射冈站HDWWWOOO| 把腿张开老子cao烂你在线视频 | 亚洲人成无码网WWW电影麻豆| 日韩内射美女片在线观看网站 | 久久精品无码一区二区软件| 国产成人无码一区二区三区在线 | 免费国内接码在线接收| 久久久精品国产免大香伊| 精品久久久无码人妻字幂 | 偷欢人妻激情系列| 上司侵犯部下的人妻| 日韩精品无码一区二区视频 | 老熟女另类XXX精品视频| 久别的草原在线影院观看中文 | 国产好爽…又高潮了毛片| 顶级大但人文艺术巫| 成人亚洲综合AV天堂| 草棚CAOPORON已满18进| 把老师摁在黑板上做了一节课作文| AV无码一区二区大桥久未| ★浪潮av无码一区二区| CHINESE农村野外XXXXVIDEOS| 久久精品成人亚洲另类欧美 | 欧美VIDEOS另类色HDFR| 毛片A级毛片免费观看品善网| 久久久久女教师免费一区| 久久精品A一国产成人免费网站| 精品国产AⅤ一区二区三区在线看 精品国产AⅤ一区二区三区V视界 精品国产AⅤ一区二区三区V免费 精品国产AⅤ一区二区三区4区 | 精品多毛少妇人妻AV免费久久| 国内AI明星造梦鞠婧祎MV| 国产亚洲精品第一综合另类| 国产亚洲精品国产福APP| 国产午夜福利久久精品 | 波多野AV一区二区无码| 被伴郎的内捧猛烈进出H| 亚洲欭美日韩颜射在线| 亚洲色大成网站WWW久久| 亚洲情综合五月天| 亚洲中文字幕在线无码一区二区| 亚洲一卡2卡3卡4卡精品分类 | 香港经典A毛片免费观看变态| 无套内谢的新婚少妇国语播放 | 人妻内射.PORN| 男人J进入女人P呻吟视频免费| 鲁大师在线观看视频在线播放| 猫咪AV成人永久网站| 男人激烈吮乳吃奶动态图| 欧美巨大巨粗黑人性AAAAAA| 欧美视频二区欧美影视| 热RE99久久精品国99热| 日韩AV午夜在线观看| 少妇极品熟妇人妻无码| 无码精品人妻一区二区三区ap| 性少妇VIDEOXXX欧美69| 亚洲国产精品福利片在线观看 | 国产欧美精品一区二区色综合 | 非洲黑人妇女XXXXXHD| 国产成人无码免费视频麻豆 | 成人午夜亚洲精品无码网站| 东京热无码AV男人的天堂| 国产高清在线观看AV片麻豆| 国产熟女高潮精品视频区| 精品9E精品视频在线观看| 久久精品午夜一区二区福利| 免费无码久久成人网站入口| 欧美最婬乱婬爆婬牲视| 色又黄又爽18禁免费网站现观看 | 草草浮力地址线路①屁屁影院 | 日本丰满少妇毛茸茸|