余祥宣, 崔国华, 邹海明. 计算机算法基础.3版[M]. 华中科技大学出版社, 2006.
P202 算法8.5 这里使用的是老师PPT上给的方法
#include<iostream>
using namespace std;
#define N 8
int X[N+1];
//int RUBBISH = 0;//莫名其妙如果去掉这行COUNT的值在vs2017达不到预期,在另一编译环境正常
bool PLACE(int k)
{
int i = 1;
while (i < k)
{
if ((X[i] == X[k]) || (abs(X[i] - X[k]) == abs(i - k)))
return false;
i++;
}
return true;
}
void printResult()
{
int i = 1;
static int COUNT = 0;
cout << "Count:" << ++COUNT << endl;
/*while (i <=N)//越界
{
cout << X[i++] << " ";
}*/
for (i = 1; i <=N; i++)
{
cout << X[i] << " ";
}
cout << endl;
}
void NQUEENS(int k)
{
X[k] = 1;
while (X[k] <= N)
{
if (PLACE(k))
if (k == N)
printResult();
else
NQUEENS(k + 1);
X[k] = X[k] + 1;
}
}
int main()
{
NQUEENS(1);
system("pause");
return 0;
}
运行结果