对一个行列数皆为2的n次方且中间有一空缺的棋盘进行填充
#include<bits/stdc++.h>
using namespace std;
int **Board;
int tile=1;
void ChessBoard(int tr, int tc, int dr, int dc, int size)
{
if(size==1)
{
cout<<"size==1,return!"<<endl;
return;
}
int t = tile++,
s = size/2;
if(dr<tr+s && dc<tc+s)
ChessBoard(tr, tc, dr, dc, s);
else
{
Board[tr+s-1][tc+s-1] = t;
cout<<"此时t:"<<t<<" 填充格坐标位于:("<<tr+s-1<<","<<tc+s-1<<")"<<endl;
ChessBoard(tr, tc, tr+s-1, tc+s-1, s);
}
if(dr<tr+s && dc>=tc+s)
ChessBoard(tr, tc+s, dr, dc, s);
else
{
Board[tr+s-1][tc+s] = t;
cout<<"此时t:"<<t<<" 填充格坐标位于:("<<tr+s-1<<","<<tc+s<<")"<<endl;
ChessBoard(tr, tc+s, tr+s-1, tc+s, s);
}
if(dr>=tr+s && dc<tc+s)
ChessBoard(tr+s, tc, dr, dc, s);
else
{
Board[tr+s][tc+s-1] = t;
cout<<"此时t:"<<t<<" 填充格坐标位于:("<<tr+s<<","<<tc+s-1<<")"<<endl;
ChessBoard(tr+s, tc, tr+s, tc+s-1, s);
}
if(dr>=tr+s && dr>=tc+s)
ChessBoard(tr+s, tc+s, dr, dc, s);
else
{
Board[tr+s][tc+s] = t;
cout<<"此时t:"<<t<<" 填充格坐标位于:("<<tr+s<<","<<tc+s<<")"<<endl;
ChessBoard(tr+s, tc+s, tr+s, tc+s, s);
}
}
void OutputBoard(int size)
{
for(int i=0; i<size; ++i)
{
for(int j=0; j<size; ++j)
{
cout.width(5);
cout<<Board[i][j];
}
cout<<endl;
}
}
int main()
{
int size, i;
cout<<"Lines or Columns of chessBoard: ";
cin>>size;
Board = new int*[size];
for(i=0; i<size; ++i)
{
Board[i] = new int[size];
for(int j=0; j<size; ++j)
Board[i][j] = 0;
}
int dr, dc;
cout<<"Line and column NO. of defective grid: ";
cin>>dr>>dc;
ChessBoard(0, 0, dr, dc, size);
OutputBoard(size);
for(int i=0; i<size; ++i)
delete[] Board[i];
delete[] Board;
system("pause");
return 0;
}
==这个程序主要运用了深度递归,具体方式不好理解,可以通过运行的输出结果对整个过程有一个好的了解==
wchart.js/