#include <iostream>
using namespace std;
int row_col[8];
int count=0;
bool isOk(int row,int col)
{
int leftUp=col-1;
int rightUp=col+1;
for(int i=0;i<row;i++)
{
if(row_col[i]==col)
{
return false;
}
if(leftUp>=0)
{
if(leftUp==row_col[row-i-1])
{
return false;
}
}
if(rightUp<=7)
{
if(rightUp==row_col[row-i-1])
{
return false;
}
}
leftUp--;
rightUp++;
}
return true;
}
void printOut()
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(row_col[i]==j)
{
cout<<" Q ";
}
else
{
cout<<" * ";
}
}
cout<<endl;
}
cout<<"————————————————————————————————————————"<<endl;
}
void printEightQueen(int row)
{
if(row==8)
{
count++;
printOut();
return;
}
else
{
for(int i=0;i<8;i++)
{
if(isOk(row,i))
{
row_col[row]=i;
printEightQueen(row+1);
}
}
}
}
int main()
{
printEightQueen(0);
cout<<"八皇后问题一共有"<<count<<"种可能";
}
八皇后问题(C++回溯法求解)
最新推荐文章于 2024-02-22 00:40:24 发布