7-3 棋盘覆盖 (10 分)(思路加详解)Come baby
生活随笔
收集整理的這篇文章主要介紹了
7-3 棋盘覆盖 (10 分)(思路加详解)Come baby
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目:
輸入格式:
輸入三個數,分別是aa,bb,length.
輸出格式:
輸出整個棋盤。其中特殊方格填為0,然后鋪棋盤的順序為:先鋪四個子棋盤交界的部分,然后遞歸的對每個子棋盤按照左上,右上,右下,左下的順時針順序鋪滿棋盤。每一塊骨牌中三個方格數字相同,按照順序標號,即第一塊骨牌全標為1,第二塊骨牌全標為2,…,以此類推。輸出的每個數占4個場寬,右對齊。
輸入樣例:
1 1 4結尾無空行
表示:特殊格子為(1,1),棋盤有4行4列。
輸出樣例:
0 2 3 32 2 1 35 1 1 45 5 4 4表示:先鋪三個1(一塊L型骨牌),再鋪三個2,…,最后鋪三個5.
二:思路
這是分治算法的思想,把一個大問題化為小問題,但他特殊點,這個化為小問題之后,就不需要合并了
思路:
1.將棋盤劃分為4個子棋盤 在某個棋盤中有特殊方格,而其他3個子棋盤沒有特殊方格
2.在其他沒有特殊方格的子棋盤的交匯處用L型的特殊方格進行覆蓋
3.直到最后的size == 1 為止
三:上碼
/* 思路: 1.將棋盤劃分為4個子棋盤 在某個棋盤中有特殊方格,而其他3個子棋盤沒有特殊方格 2.在其他沒有特殊方格的子棋盤的交匯處用L型的特殊方格進行覆蓋 3.直到最后的size == 1 為止 */ #include<bits/stdc++.h> using namespace std;int cover[100][100]; int title = 1; //tr,tc:表示棋盤左上角的初始位置的行列號 ,dr dc 表示特殊方格的行列號 size = 2^k; void board_cover(int tr,int tc,int dr,int dc,int size){if(size == 1){return ;} int num = title++;size = size / 2;//棋盤劃分//1.棋盤的左上角 //如果特殊方格在左上角的棋盤中 if(dr < tr + size && dc < tc + size)board_cover(tr,tc,dr,dc,size);else{//如果方格不在左上角的子棋盤中,那么的話在子棋盤的最右下角 覆蓋一個方格 cover[tr + size - 1][tc + size - 1] = num;board_cover(tr,tc,tr + size - 1,tc + size -1,size); //tr + size - 1,tc + size -1 特殊方格的坐標 }//2.棋盤的右上角//如果特殊方格在棋盤的子棋盤的右上角 if(dr < tr + size && dc >= tc + size)board_cover(tr,tc + size,dr,dc,size);else{//如果方格不在右上角的子棋盤中,那么的話在子棋盤的最左下角 覆蓋一個方格cover[tr + size - 1][tc + size] = num;board_cover(tr,tc + size,tr + size - 1,tc + size,size); }//3.棋盤的右下角if(dr >= tr + size && dc >= tc + size)board_cover(tr + size,tc + size,dr,dc,size);else{cover[tr + size][tc + size] = num;board_cover(tr + size,tc + size,tr + size,tc + size,size);}//4.棋盤的左下角if(dr >= tr + size && dc < tc + size)board_cover(tr + size,tc,dr,dc,size);else{cover[tr + size][tc + size - 1] = num;board_cover(tr + size,tc,tr + size,tc + size -1,size); }} int main(){int dr,dc,length;cin >> dr >> dc >> length;cover[dr][dc] = 0; board_cover(1,1,dr,dc,length);for(int i = 1; i <= length; i++){ for(int j = 1; j <= length; j++){//cout << ' ' << ' ' << ' ' << cover[i][j];//這里的輸出格式是為4個字節 不能是前面3個空 printf("%4d",cover[i][j]);}cout << endl;}}總結
以上是生活随笔為你收集整理的7-3 棋盘覆盖 (10 分)(思路加详解)Come baby的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广告危机持续 至少12个大品牌暂停在社交
- 下一篇: 英特尔酷睿 Ultra 155H / 1