老师当初评论,”垃圾”,垃圾就垃圾,管他呢,反正是原创
//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; }

|