(1)問題
在乙個2^k×2^k個方格組成的棋盤中,若有乙個方格與其他方格不同,則稱該方格為一特殊方格,且稱該棋盤為乙個特殊棋盤.顯然特殊方格在棋盤上出現的位置有4^k種情形.因而對任何k≥0,有4^k種不同的特殊棋盤.
當k=3時,一共有64種特殊棋盤,圖1為其中的一種.
用下圖2所示的4種不同形態的l型骨牌覆蓋乙個給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋.
圖2(2)實現
package com.test;
public class test
private static void print()
system.out.println();
} }/**
* * @param tr 棋盤左上角行號
* @param tc 棋盤左上角列號
* @param dr 特殊方格行號
* @param dc 特殊方格列號
* @param size 棋盤的邊長
*/public static void chessboard(int tr,int tc,int dr,int dc,int size)
int t = tile++;
int s = size/2;
//覆蓋左上角棋盤
if (dr=tc+s) else
//覆蓋左下角棋盤
if (dr>=tr+s&&dc=tr+s&&dc>=tc+s) else
}}
(3)執行結果
演算法實驗4 棋盤覆蓋
description 在乙個2k x 2k 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。在棋盤覆蓋問題中,要用圖示的4種不同形態的l型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個l型骨牌不得重疊覆蓋。input k,dr,dc。k定...
棋盤覆蓋問題
source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i...
棋盤覆蓋演算法
在乙個2k 2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤,顯然特殊方格在棋盤上出現的位置有4k種情形。因而對任何k 0,有4k種不同的特殊棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤中無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊...