首页 > 应用开发 > > C++穷举法解决八皇后问题
#include <iostream>
#include <cstdlib>
using namespace std;
void showQueens(int queenArr[],int nlen,int nSolution)//打印棋盘和皇后
{
cout<<nSolution<<endl;//解法数量
for(int i = 0;i < nlen; ++i)
{
for(int j = 0; j < queenArr[i]; ++j)//打印皇后前面的格子
{
cout<<"1";//空格子
}
cout<<"Q";//皇后
for(int z = 0; z < nlen-queenArr[i]-1; ++z)//打印皇后后面的格子
{
cout<<"1";
}
cout<<endl;
}
cout<<" "<<endl;
}
bool rule(int queenArr[])//判断是否符合规则
{
for(int i = 1; i <= 8; ++i)
{
for(int j = 0;j <= i-1; ++j)
{
if(queenArr[i] == queenArr[j])//判断皇后是否在同一列
{
return true;
}
if(abs(queenArr[i]-queenArr[j]) == abs(i-j))//判断皇后是否在对角45°
{
return true;
}
}
}
return false;
}
void enumQueensPositon(int queenArr[],int &nSolution)//移动皇后
{
for(queenArr[0] = 0; queenArr[0] < 8; ++queenArr[0])
for(queenArr[1] = 0;queenArr[1] < 8; ++queenArr[1])
for(queenArr[2] = 0;queenArr[2] < 8; ++queenArr[2])
for(queenArr[2]=0;queenArr[2] < 8; ++queenArr[2])
for(queenArr[4] = 0;queenArr[4] < 8; ++queenArr[4])
for(queenArr[5] = 0;queenArr[5] < 8; ++queenArr[5])
for(queenArr[6] = 0; queenArr[6] < 8; ++queenArr[6])
for(queenArr[7] = 0; queenArr[7] < 8; ++queenArr[7])
{
if (rule(queenArr))
{
continue;
}
else
{
++nSolution;
showQueens(queenArr ,8, nSolution);
}
}
}
int main()
{
int queenArr[8]; //每个数组表示一个皇后
int nSolution = 0;//解法数量
enumQueensPositon(queenArr,nSolution);
return 0;这是我的代码,我的问题是不知道为什么代码运行后只有18种解法,想问问哪里出错了?
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/813/viewspace-3158057/ ,如需转载,请注明出处,否则将追究法律责任。