在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中棋盤覆蓋問題分析

C語言編程學(xué)習(xí)基地 ? 來源:C語言編程學(xué)習(xí)基地 ? 作者:C語言編程學(xué)習(xí)基地 ? 2021-10-08 17:06 ? 次閱讀

棋盤覆蓋問題

問題說明

在一個(gè)2^k * 2^k個(gè)方格組成的棋盤中,恰有一個(gè)方格與其它方格不同,稱該方格為一特殊方格。

棋盤覆蓋問題就是要用圖示的4種不同形態(tài)的L型骨牌覆蓋給定棋盤上除特殊方格之外的所有方格,且任何2個(gè)L型骨牌不得重疊覆蓋。

功能說明

本程序用分治法的思想解決了棋盤覆蓋問題,顯示輸出

代碼簡(jiǎn)述

用戶輸入數(shù)據(jù),程序輸入檢測(cè),動(dòng)態(tài)分配空間,調(diào)用棋盤覆蓋函數(shù),把計(jì)算結(jié)果存儲(chǔ)到board(二維數(shù)組指針),顯示輸出。

其中棋盤覆蓋函數(shù)用分治的思想把棋盤分成四份,遞歸求解。

源碼示例:

#include《iostream》#include《math.h》#include《cctype》usingnamespacestd;intnum_Now =0;//記錄L型骨牌編號(hào)int**board =NULL;//棋盤指針//函數(shù)聲明

voidChessBoard(intnum_BoardTopLeftRow,intnum_BoardTopLeftColumn,intnum_SpecialRow,intnum_SpecialColumn,intboardSize);intmain() {intnum_BoardTopLeftRow =0,//棋盤左上角的行號(hào)

num_BoardTopLeftColumn =0,//棋盤左上角的列號(hào)num_SpecialRow =0,//特殊方格所在的行號(hào)num_SpecialColumn =0,//特殊方格所在的列號(hào)boardSize =0,//棋盤大小k =0;//構(gòu)成的(2^k)*(2^k)個(gè)方格的棋盤

//用戶界面cout 《《“---------------- 棋盤覆蓋問題 ----------------”《《 endl;cout 《《“請(qǐng)輸入k(k》=0),構(gòu)成(2^k)*(2^k)個(gè)方格的棋盤”《《 endl;//輸入k值cin 》》 k;//判斷輸入數(shù)據(jù)合法性,包括檢查輸入是否為數(shù)字,k值是否大于0if(cin.fail() || k 《0){cout 《《“輸入k錯(cuò)誤!”《《 endl;system(“pause”);

return0;}//計(jì)算棋盤大小

boardSize =pow(2, k);cout 《《“請(qǐng)輸入特殊方格所在的行號(hào)和列號(hào)(從0開始,用空格隔開)”《《 endl;//輸入特殊方格所在的行號(hào)和列號(hào)cin 》》 num_SpecialRow 》》 num_SpecialColumn;//判斷輸入數(shù)據(jù)合法性,包括檢查輸入是否為數(shù)字,特殊方格行號(hào)列號(hào)是否大于0,特殊方格行號(hào)列號(hào)是否不大于棋盤大小

if(cin.fail() || num_SpecialRow 《0|| num_SpecialColumn 《0|| num_SpecialRow 》= boardSize || num_SpecialColumn 》= boardSize){cout 《《“輸入行號(hào)或列號(hào)錯(cuò)誤!”《《 endl;system(“pause”);return0;}//分配棋盤空間

board =newint*[boardSize];for(autoi =0; i 《 boardSize; i++){board[i] =newint[boardSize];}//為特殊方格賦初值

0board[num_SpecialRow][num_SpecialColumn] =0;//執(zhí)行棋盤覆蓋函數(shù)

ChessBoard(num_BoardTopLeftRow, num_BoardTopLeftColumn, num_SpecialRow, num_SpecialColumn, boardSize);//顯示輸出

cout 《《“------------------------------------------------”《《 endl;for(autoi =0; i 《 boardSize; i++){for(autoj =0; j 《 boardSize; j++){cout 《《 board[i][j] 《《“ ”;}cout 《《 endl;}cout 《《“------------------------------------------------”《《 endl;//暫停查看結(jié)果

system(“pause”);//釋放內(nèi)存for(inti =0; i 《= boardSize; i++)delete[]board[i];delete[]board;//指針置空board =NULL;return0;}//棋盤覆蓋函數(shù)

voidChessBoard(intnum_BoardTopLeftRow,intnum_BoardTopLeftColumn,intnum_SpecialRow,intnum_SpecialColumn,intboardSize){//棋盤大小為1則直接返回if(boardSize ==1)return;intnum = ++num_Now,//L型骨牌編號(hào)

size = boardSize /2;//分割棋盤,行列各一分為二//覆蓋左上角子棋盤

if(num_SpecialRow 《 num_BoardTopLeftRow + size && num_SpecialColumn 《 num_BoardTopLeftColumn + size){//遞歸覆蓋含有特殊方格的子棋盤

ChessBoard(num_BoardTopLeftRow, num_BoardTopLeftColumn, num_SpecialRow, num_SpecialColumn, size);}else{//用編號(hào)為num的L型骨牌覆蓋右下角

board[num_BoardTopLeftRow + size -1][num_BoardTopLeftColumn + size -1] = num;//遞歸覆蓋其余棋盤

ChessBoard(num_BoardTopLeftRow, num_BoardTopLeftColumn, num_BoardTopLeftRow + size -1, num_BoardTopLeftColumn + size -1, size);}//覆蓋右上角子棋盤

if(num_SpecialRow 《 num_BoardTopLeftRow + size && num_SpecialColumn 》= num_BoardTopLeftColumn + size){//遞歸覆蓋含有特殊方格的子棋盤ChessBoard(num_BoardTopLeftRow, num_BoardTopLeftColumn + size, num_SpecialRow, num_SpecialColumn, size);}else{//用編號(hào)為num的L型骨牌覆蓋左下角

board[num_BoardTopLeftRow + size -1][num_BoardTopLeftColumn + size] = num;//遞歸覆蓋其余棋盤ChessBoard(num_BoardTopLeftRow, num_BoardTopLeftColumn + size, num_BoardTopLeftRow + size -1, num_BoardTopLeftColumn + size, size);}//覆蓋左下角子棋盤

if(num_SpecialRow 》= num_BoardTopLeftRow + size && num_SpecialColumn 《 num_BoardTopLeftColumn + size){//遞歸覆蓋含有特殊方格的子棋盤ChessBoard(num_BoardTopLeftRow + size, num_BoardTopLeftColumn, num_SpecialRow, num_SpecialColumn, size);}else{//用編號(hào)為num的L型骨牌覆蓋右上角

board[num_BoardTopLeftRow + size][num_BoardTopLeftColumn + size -1] = num;//遞歸覆蓋其余棋盤

ChessBoard(num_BoardTopLeftRow + size, num_BoardTopLeftColumn, num_BoardTopLeftRow + size, num_BoardTopLeftColumn + size -1, size);}//覆蓋右下角子棋盤

if(num_SpecialRow 》= num_BoardTopLeftRow + size && num_SpecialColumn 》= num_BoardTopLeftColumn + size){//遞歸覆蓋含有特殊方格的子棋盤

ChessBoard(num_BoardTopLeftRow + size, num_BoardTopLeftColumn + size, num_SpecialRow, num_SpecialColumn, size);}else{//用編號(hào)為num的L型骨牌覆蓋左上角

board[num_BoardTopLeftRow + size][num_BoardTopLeftColumn + size] = num;//遞歸覆蓋其余棋盤

ChessBoard(num_BoardTopLeftRow + size, num_BoardTopLeftColumn + size, num_BoardTopLeftRow + size, num_BoardTopLeftColumn + size, size);}}

今天的分享就到這里了,大家要好好學(xué)C++喲~

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7616

    瀏覽量

    137953
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73922

原文標(biāo)題:C++經(jīng)典算法問題:棋盤覆蓋問題(分治算法)!含源碼示例

文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?188次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    EE-112:模擬C++的類實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++的類實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類實(shí)現(xiàn)

    C7000 C/C++優(yōu)化指南用戶手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《C7000 C/C++優(yōu)化指南用戶手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 11-09 15:00 ?0次下載
    <b class='flag-5'>C</b>7000 <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>優(yōu)化指南用戶手冊(cè)

    C語言和C++結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?374次閱讀

    C7000優(yōu)化C/C++編譯器

    電子發(fā)燒友網(wǎng)站提供《C7000優(yōu)化C/C++編譯器.pdf》資料免費(fèi)下載
    發(fā)表于 10-30 09:45 ?0次下載
    <b class='flag-5'>C</b>7000優(yōu)化<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>編譯器

    使用OpenVINO GenAI API在C++構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開發(fā)的,而將生成式AI(GenAI)功能集成到這些應(yīng)用程序可能會(huì)很具有挑戰(zhàn)性,尤其是因?yàn)槭褂孟?Hugging Face 這樣的 Python 庫的復(fù)雜性。C++
    的頭像 發(fā)表于 10-12 09:36 ?492次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C++</b><b class='flag-5'>中</b>構(gòu)建AI應(yīng)用程序

    ostream在c++的用法

    ostream 是 C++ 標(biāo)準(zhǔn)庫中一個(gè)非常重要的類,它位于 頭文件(實(shí)際上,更常見的是通過包含 頭文件來間接包含 ,因?yàn)?包含了 和 )。 ostream 類及其派生類(如 std::cout
    的頭像 發(fā)表于 09-20 15:11 ?1018次閱讀

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開發(fā)的使用習(xí)慣與推理方式。與OpenCV的Mat對(duì)象對(duì)接方式更是幾乎無縫對(duì)接,非常的方便好用。
    的頭像 發(fā)表于 07-26 09:20 ?1081次閱讀

    ModusToolbox 3.2在c代碼包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個(gè)用純 C 語言編寫的 XMC4700 項(xiàng)目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼。 我可以構(gòu)建獨(dú)立的 .cpp/.hpp
    發(fā)表于 07-23 08:21

    C++語言基礎(chǔ)知識(shí)

    電子發(fā)燒友網(wǎng)站提供《C++語言基礎(chǔ)知識(shí).pdf》資料免費(fèi)下載
    發(fā)表于 07-19 10:58 ?8次下載

    C++實(shí)現(xiàn)類似instanceof的方法

    函數(shù),可實(shí)際上C++沒有。但是別著急,其實(shí)C++中有兩種簡(jiǎn)單的方法可以實(shí)現(xiàn)類似Java的instanceof的功能。 在 C++
    的頭像 發(fā)表于 07-18 10:16 ?688次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實(shí)現(xiàn)類似instanceof的方法

    Perforce靜態(tài)代碼分析專家解讀MISRA C++:2023?新標(biāo)準(zhǔn):如何安全、高效地使用基于范圍的for循環(huán),防范未定義行

    Frank van den Beuken博士的博客系列,本期為第三篇。 在前兩篇系列文章,我們向您介紹了 新的MISRA C++ 標(biāo)準(zhǔn) 和 C++簡(jiǎn)史 。本文,我們將仔細(xì)研究C++
    的頭像 發(fā)表于 06-18 12:57 ?510次閱讀

    C/C++兩種宏實(shí)現(xiàn)方式

    #ifndef的方式受C/C++語言標(biāo)準(zhǔn)支持。它不僅可以保證同一個(gè)文件不會(huì)被包含多次,也能保證內(nèi)容完全相同的兩個(gè)文件(或者代碼片段)不會(huì)被不小心同時(shí)包含。
    的頭像 發(fā)表于 04-19 11:50 ?712次閱讀

    鴻蒙OS開發(fā)實(shí)例:【Native C++

    使用DevEco Studio創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用Native C++模板,實(shí)現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫的功能。使用C標(biāo)準(zhǔn)庫hypot接口計(jì)算兩個(gè)給定數(shù)平方和的平
    的頭像 發(fā)表于 04-14 11:43 ?2810次閱讀
    鴻蒙OS開發(fā)實(shí)例:【Native <b class='flag-5'>C++</b>】

    使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯(cuò)誤

    在前兩篇博客,我們?向您介紹了新的 MISRA C++ 標(biāo)準(zhǔn)?和?C++ 的歷史?。在這篇博客,我們將仔細(xì)研究以 C++
    的頭像 發(fā)表于 03-28 13:53 ?877次閱讀
    使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環(huán)中的錯(cuò)誤
    主站蜘蛛池模板: 一区二区三区在线播放 | 成人午夜免费视频 | 亚洲精品久久婷婷爱久久婷婷 | 婷婷丁香九月 | 女人被免费网站视频在线 | 朋友夫妇和交换性bd高清 | 苦瓜se影院在线视频网站 | 五月激情站 | 黄色在线视频免费看 | 久久综合狠狠综合久久综合88 | 亚洲午夜视频在线 | 好紧好爽的午夜寂寞视频 | 国内精品第一页 | 奇米影视久久 | 午夜在线免费观看 | 亚洲天堂成人在线 | 久久精品午夜 | 色综合久久久久久久久久久 | 69日本xxⅹxxxxx18 | 久久www免费人成_看 | www.激情网.com | 欧美69xx| 欧美日韩一区二区不卡 | 在线伊人网 | 国产精品高清一区二区三区 | 三级在线观看视频 | 99国内视频| 国产黄色大片又色又爽 | 赛罗奥特曼银河帝国普通话免费版 | 久久综合九色欧美综合狠狠 | 婷婷亚洲五月琪琪综合 | 日本高清加勒比 | 欧美在线一级视频 | 四虎一区二区三区精品 | 国产欧美日韩va | 中文字幕在线视频第一页 | 四虎影院永久网址 | 又粗又长又大真舒服好爽漫画 | 精品视频网站 | 一级一片一a一片 | 日韩三级观看 |