国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者:C語言編程學習基地 ? 2021-10-08 17:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

棋盤覆蓋問題

問題說明

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

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

功能說明

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

代碼簡述

用戶輸入數據,程序輸入檢測,動態分配空間,調用棋盤覆蓋函數,把計算結果存儲到board(二維數組指針),顯示輸出。

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

源碼示例:

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

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

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

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

return0;}//計算棋盤大小

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

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

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

0board[num_SpecialRow][num_SpecialColumn] =0;//執行棋盤覆蓋函數

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;//暫停查看結果

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

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

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{//用編號為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{//用編號為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{//用編號為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{//用編號為num的L型骨牌覆蓋左上角

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

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

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145601
  • C++
    C++
    +關注

    關注

    22

    文章

    2124

    瀏覽量

    77119

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

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    keil實現cc++混合編程

    起因項目中使用到一個開源的模擬IIC的庫,封裝的比較好,但是是使用c++寫的。于是將其移植到自己的項目中,主要有以下三步操作: 在工程選項 C/C++中去掉勾選
    發表于 01-26 08:58

    C語言與C++的區別及聯系

    是面向過程語言,而C++是面向對象語言。說CC++的區別,也就是在比較面向過程和面向對象的區別。 1、面向過程和面向對象的區別 面向過程:面向過程編程就是分析出解決問題的步驟,然
    發表于 12-24 07:23

    CC++之間的聯系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++編譯器下編譯通過。 2、底層控制: C++
    發表于 12-11 06:51

    C語言和C++之間的區別是什么

    區別 1、面向對象編程 (OOP): C語言是一種面向過程的語言,它強調的是通過函數將任務分解為一系列步驟進行執行。 C++C語言的基礎上擴展了面向對象的特性,支持類(class)、封裝、繼承
    發表于 12-11 06:23

    C/C++條件編譯

    條件編譯是一種在編譯時根據條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ ,條件編譯使用預處理指令 #ifdef、#endif、#else 和 #elif 來實現。常用的條件編譯指令有
    發表于 12-05 06:21

    C++程序異常的處理機制

    1、什么是異常處理? 有經驗的朋友應該知道,在正常的CC++編程過程難免會碰到程序不按照原本設計運行的情況。 最常見的有除法分母為零,數組越界,內存分配失效、打開相應文件失敗等等。 一個程序
    發表于 12-02 07:12

    嵌入式C/C++回歸測試四大最佳實踐(附自動化測試工具TESSY使用教程)

    嵌入式開發,一次微小的代碼改動都可能引發“蝴蝶效應”,如何守護系統的穩健?推薦專業的自動化測試工具#TESSY,源自戴姆勒-奔馳,是嵌入式C/C++單元/集成測試的標桿。
    的頭像 發表于 10-31 14:21 ?410次閱讀
    嵌入式<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>回歸測試四大最佳實踐(附自動化測試工具TESSY使用教程)

    C/C++代碼靜態測試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate??QAC?項目的相對/根路徑的支持。C++?分析也得到了增強,增加了用于檢測 C++?并發問題的新檢查,并改進了實體名稱和實
    的頭像 發表于 10-13 18:11 ?573次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態測試工具Perforce QAC 2025.3的新特性

    技能+1!如何在樹莓派上使用C++控制GPIO?

    和PiGPIO等庫,C++可用于編程控制樹莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對速度和精度要求較高的硬件項目。在樹莓派社區,關于“Python
    的頭像 發表于 08-06 15:33 ?4156次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹莓派上哪種語言更優?

    Python是樹莓派上的首選編程語言,我們的大部分教程都使用它。然而,C++在物聯網項目中同樣廣受歡迎且功能強大。那么,在樹莓派項目中選擇哪種語言更合適呢?Python因其簡潔性、豐富的庫和資源而被
    的頭像 發表于 07-24 15:32 ?949次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹莓派上哪種語言更優?

    Perforce QAC產品簡介:面向C/C++的靜態代碼分析工具(已通過SO 26262認證)

    Perforce QAC專為C/C++開發者打造,支持多種編碼規范、功能安全標準(ISO 26262)等,廣泛用于汽車、醫療、嵌入式開發領域,可幫助快速識別關鍵缺陷、提升代碼質量、實現合規交付。
    的頭像 發表于 07-10 15:57 ?1274次閱讀
    Perforce QAC產品簡介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>的靜態代碼<b class='flag-5'>分析</b>工具(已通過SO 26262認證)

    請問如何在C++中使用NPU上的模型緩存?

    無法確定如何在 C++ 的 NPU 上使用模型緩存
    發表于 06-24 07:25

    在OpenVINO? C++代碼啟用 AddressSanitizer 時的內存泄漏怎么解決?

    在 OpenVINO? C++代碼啟用 AddressSanitizer 時遇到內存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發表于 06-23 07:16

    主流的 MCU 開發語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉。先說內存這道坎兒。您當stm32f4的256kRAM
    的頭像 發表于 05-21 10:33 ?1044次閱讀
    主流的 MCU 開發語言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    Helix QAC 2025.1 重磅發布!MISRA C:2025? 100%覆蓋

    Helix QAC 2025.1新增功能 Helix QAC 2025.1實現了對新版MISRA C:2025?標準的 100% 覆蓋,并提供對應的合規模塊。此版本還擴展了對 CERT C
    的頭像 發表于 05-13 16:48 ?1463次閱讀
    Helix QAC 2025.1 重磅發布!MISRA <b class='flag-5'>C</b>:2025? 100%<b class='flag-5'>覆蓋</b>