二分法,不相似情况。
解残缺棋盘
#include<iostream>
using namespace std;
int Amount=0,Board[100][100];
void OutputBoard(int size)
{
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
cout<<Board[i][j]<<"\t";
cout<<"\n";
}
}
/*******************************************************
* tr 子棋盘左上角方格所在的行
* tc 子棋盘左上角方格所在的列
* dr 残缺方格所在的行
* dc 残缺方格所在的列
* size 棋盘的行数或列数
*********************************************************/
void Cover(int tr,int tc,int dr,int dc,int size)
{
int s,t;
if(size<2)
return;
Amount++;
t=Amount;
s=size/2;
if(dr<tr+s&&dc<tc+s) //残缺方格在左上棋盘
{
Cover(tr,tc,dr,dc,s);
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s-1]=t