您的位置:首页 > 其它

残缺棋盘(4.3.3_【例14】)

2011-10-21 22:24 155 查看
二分法,不相似情况。

解残缺棋盘

#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;
Board[tr+s][tc+s]=t;
Cover(tr,tc+s,tr+s-1,tc+s,s);
Cover(tr+s,tc,tr+s,tc+s-1,s);
Cover(tr+s,tc+s,tr+s,tc+s,s);
}
else if(dr<tr+s&&dc>=tc+s)	//残缺方格位于右上方
{
Cover(tr,tc+s,dr,dc,s);
Board[tr+s-1][tc+s-1]=t;
Board[tr+s][tc+s-1]=t;
Board[tr+s][tc+s]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr+s,tc,tr+s,tc+s-1,s);
Cover(tr+s,tc+s,tr+s,tc+s,s);
}
else if(dr>=tr+s&&dc<tc+s)	//残缺方格位于左下方
{
Cover(tr+s,tc,dr,dc,s);
Board[tr+s-1][tc+s-1]=t;
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr,tc+s,tr+s-1,tc+s,s);
Cover(tr+s,tc+s,tr+s,tc+s,s);
}
else if(dr>=tr+s&&dc>=tc+s)	//残缺方格位于右下方
{
Cover(tr+s,tc+s,dr,dc,s);
Board[tr+s-1][tc+s-1]=t;
Board[tr+s-1][tc+s]=t;
Board[tr+s][tc+s-1]=t;
Cover(tr,tc,tr+s-1,tc+s-1,s);
Cover(tr,tc+s,tr+s-1,tc+s,s);
Cover(tr+s,tc,tr+s,tc+s-1,s);
}
}

void main()
{
int size=1,x,y,i,j,k;
cout<<"Please input k=";
cin>>k;
for(i=1;i<=k;i++)
size=size*2;
cout<<"Please input incomplete pane:";
cin>>x>>y;
Cover(0,0,x,y,size);
OutputBoard(size);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: