#include <iostream>
#include <stdlib.h>
int board[100][100],tile=1;
void ff(int tr,int tc,int dr,int dc,int t)
{
if(dr>tr&&dc>tc)
{
board[tr][tc]=t;
board[tr][tc+1]=t;
board[tr+1][tc]=t;
}
if(tr<dr&&dc==tc)
{
board[tr][tc]=t;
board[tr][tc+1]=t;
board[tr+1][tc+1]=t;
}
if(tr==dr&&tc<dc)
{
board[tr][tc]=t;
board[tr+1][tc]=t;
board[tr+1][tc+1]=t;
}
if(tr==dr&&dc==tc)
{
board[tr][tc+1]=t;
board[tr+1][tc]=t;
board[tr+1][tc+1]=t;
}
}
void chess(int tr,int tc,int dr,int dc,int size)
{
int s=size/2;
int t=tile++;
if(s==1) {ff(tr,tc,dr,dc,t);return;}
if(dr<tr+s&&dc<tc+s)
chess(tr,tc,dr,dc,s);
else
{
board[tr+s-1][tc+s-1]=t;
chess(tr,tc,tr+s-1,tc+s-1,s);
}
if(dr<tr+s&&dc>=tc+s)
chess(tr,tc+s,dr,dc,s);
else
{
board[tr+s-1][tc+s]=t;
chess(tr,tc+s,tr+s-1,tc+s,s);
}
if(dr>=tr+s&&dc<tc+s)
chess(tr+s,tc,dr,dc,s);
else
{
board[tr+s][tc+s-1]=t;
chess(tr+s,tc,tr+s,tc+s-1,s);
}
if(dr>=tr+s&&dc>=tc+s)
chess(tr+s,tc+s,dr,dc,s);
else
{
board[tr+s][tc+s]=t;
chess(tr+s,tc+s,tr+s,tc+s,s);
}
}
int main(int argc, char *argv[])
{
int n;
int i,j,dr,dc;
cout<<"请输入棋盘长度:"<<endl;
cin>>n;
cout<<"请输入特殊方格的坐标:"<<endl;
cin>>dr>>dc;
chess(0,0,dr,dc,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<board[i][j]<<" ";
cout<<endl;
}
system("PAUSE");
return 0;
}
这是我们校选课上的一个题目,利用分治算法去解棋盘覆盖问题算是最简单的办法吧。在还没加入校队前就看到过这个题目,当时
真的有种没法入手,也许那时真的什么都不懂吧,根本也没想过到底怎么入手。自从加入校队,每天集训,感觉好忙,每次上完课
回来总感觉收获满满,现在感觉从每一个算法开始,开始深入学习,才发现自己的很多东西学的很烂,还得慢慢补上去。每天学了
好多东西,总感觉时间太少,没时间把它们马上变成自己的程序,先慢慢写着吧,想想以后要做的事可多了。只不过确实有点忙
了,全是本学期的意料之外的,校队是意外,连学校的项目也是的,项目还在准备阶段,但我想我们组会在规定的时间内搞定,顺
利完成答辩。忙点,加油咯。