另类的八皇后求解法.

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

老师当初评论,”垃圾”,垃圾就垃圾,管他呢,反正是原创

//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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航