老师当初评论,”垃圾”,垃圾就垃圾,管他呢,反正是原创
//heckBoard.h
#pragma once
class CheckBoard
{
public:
CheckBoard(void);
~CheckBoard(void);
private:
int *Arr,*J1,*J2;
public:
void Arrange(int i);
bool Judge(void);
void OutPut(void);
private:
int cout;//记录符合情况的棋盘摆局数量
};
//heckBoard.cpp
#include "StdAfx.h"
#include ".\heckboard.h"
CheckBoard::CheckBoard(void): cout(0)
{
Arr=new int[8];
J1=new int[15];
J2=new int[15]; //8*8棋盘中的棋子行数+列数,行数-列数,均有15种不同结果。
for(unsigned int i=0;i<8;i++)
{
*(Arr+i)=i;
}//初始化棋盘,使得每列只有一个棋子
}
CheckBoard::~CheckBoard(void)
{
delete []Arr;delete []J1;delete []J2;
}
//棋盘的摆局,共判断8!次
void CheckBoard::Arrange(int i)
{
if(i==0)
{
this->Judge();
return;
}
for(int j=0;j<=i;j++)
{
if(j>0)
{
if(j%2)
{
int b=*(Arr+i);*(Arr+i)=*(Arr+j-1);*(Arr+j-1)=b;
}
else
{
int b=*(Arr+i);*(Arr+i)=*(Arr+i-j);*(Arr+i-j)=b;
}
}
Arrange(i-1);
if((i+1)%2)
{
for(int k=0;k<i/2;k++)
{
int c;c=Arr[k];Arr[k]=Arr[i-2-k];Arr[i-2-k]=c;
}
}
}
}
//盘断此刻棋盘摆局和不合乎要求
bool CheckBoard::Judge(void)
{
for(int i=0;i<15;i++)
{
J1[i]=0;J2[i]=0;
}
for(int i=0;i<8;i++)
{
if(J1[i+Arr[i]]==1)
return false;
else J1[i+Arr[i]]=1;
if(J2[7+i-Arr[i]]==1)
return false;
else J2[7+i-Arr[i]]=1;
}
cout+=1;OutPut();
return true;
}
//输出棋盘布局
void CheckBoard::OutPut(void)
{
for(unsigned int i=0;i<8;i++)
{
printf("%d ",Arr[i]);
}
printf("\n%d\n\n\n",cout);
}
// 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "heckBoard.h"
int _tmain(int argc, _TCHAR* argv[])
{
CheckBoard *pQueen=new CheckBoard;
pQueen->Arrange(7);
delete pQueen;
return 0;
}