chessboardcover.cpp

来自「Chessboard Cover,On a chessboard」· C++ 代码 · 共 91 行

CPP
91
字号
#include <iomanip>
#include <iostream>
#include <string>
#include <locale>
#include "math.h"
#include <stdlib.h>
#include <time.h>
using namespace std;
int **A;
int num;
void input(int &N,int &row,int &column)
{
  cout<<"Please input the length of chessboard: ";
  cin>>N;
  cout<<"Please input the specific position(row,column):"<<endl;
  cout<<"row=";
  cin>>row;
  cout<<"column=";
  cin>>column;
  cout<<endl;
  int *p;
  A=new int*[N];
  for(int i=0;i<N;i++)
    {
      p=new int[N];
      A[i]=p;
    }
  A[row-1][column-1]=0;  
  
}
void Divide(int n,int row,int column,int p1,int p2)
{
  if(n==1)
    return;
  int size=n/2,number=num++;
  if(row<p1+size&&column<p2+size) //left top
    Divide(size,row,column,p1,p2);
  else
    {
      A[p1+size-2][p2+size-2]=number;
      Divide(size,p1+size-1,p2+size-1,p1,p2);
    }

  if(row>p1+size-1&&column<p2+size) //left down
    Divide(size,row,column,p1+size,p2);
  else
    {
      A[p1+size-1][p2+size-2]=number;
      Divide(size,p1+size,p2+size-1,p1+size,p2);
    }
  
  if(row<p1+size&&column>=p2+size) //Right top
    Divide(size,row,column,p1,p2+size);
  else
    {
      A[p1+size-2][p2+size-1]=number;
      Divide(size,p1+size-1,p2+size,p1,p2+size);
    }

  if(row>=p1+size&&column>=p2+size) //Right down
    Divide(size,row,column,p1+size,p2+size);
  else
    {
      A[p1+size-1][p2+size-1]=number;
      Divide(size,p1+size,p2+size,p1+size,p2+size);
    }
}
void PrintA(int n)
{
  cout<<endl;
  for(int i=0;i<n;i++)
    {
      for(int j=0;j<n;j++)
        cout<<setw(3)<<A[i][j];
      cout<<endl;
    }
}

  
    
main()
{
  int N,row,column;
  input(N,row,column);
  num=1;
  Divide(N,row,column,1,1);
  PrintA(N);
  return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?