C++解决八皇后问题,主要用到了回溯。



C++解决八皇后问题,主要用到了回溯。

#include<iostream>
#include<conio.h>
using namespace std;
#define MAX 8
int sum=0;
class QueenPuzzle
{
int queens[MAX];
public:
void printOut();
int IsValid(int n);
void placeQueen(int i);

};
void QueenPuzzle::printOut()
{
for(int i=0;i<MAX;i++)
{
for(int j=0;j<MAX;j++)
{
if(j==queens[i])
cout<<”Q”;
else
cout<<”0″;

}
cout<<endl;
}
cout<<endl<<”按Q键盘退出,按其他键继续”<<endl<<endl;
if(getch()==’q')
exit(0);
}
void QueenPuzzle::placeQueen(int i)
{
for(int j=0;j<MAX;j++)
{
if(i==MAX)
{
sum++;
cout<<”第”<<sum<<”组解:”<<endl;
printOut();
return ;
}
queens[i]=j;
if(IsValid(i))
placeQueen(i+1);

}
}
int QueenPuzzle::IsValid(int n)
{
for(int i=0;i<n;i++)
{
if(queens[i]==queens[n])
return 0;
if(abs(queens[i]-queens[n])==(n-i))
return 0;
}
return 1;
}
void main()
{
QueenPuzzle queen;
queen.placeQueen(0);
cout<<”共”<<sum<<”组解”<<endl;

}

以上代码在VS2008下编译通过,总共输出92中解,非常的遗憾,这个问题是德国数学家高斯提出来的,他的结果是76。