实验案例--八皇后问题C++(模板类实现)
作者:
AmbitionX
,
2022-05-06 15:45:54
,
所有人可见
,
阅读 224
#include <iostream>
#include <cstring>
using namespace std;
class Queen
{
public:
Queen(int n);
~Queen();
int SetQueen();
void PrintQueen();
private:
int Place(int k);
int *x;
int num;
};
Queen :: Queen(int n)
{
x = new int[n];
memset(x, -1, n);
num = n;
}
Queen :: ~Queen()
{
delete [] x;
}
int Queen :: SetQueen()
{
int k = 0, count = 0;
while (k >= 0)
{
x[k]++;
while (x[k] < num && Place(k) == 1) x[k]++;
if (x[k] < num && k == num - 1)
{
cout << "第" << ++count << "个解是: ";
PrintQueen();
}
else if (x[k] < num && k < num - 1) k += 1;
else x[k --] = -1;
}
return count;
}
int Queen :: Place(int k)
{
for (int i = 0; i < k; i++)
if (x[i] == x[k] || abs(i - k) == abs(x[i] - x[k]))
return 1;
return 0;
}
void Queen :: PrintQueen()
{
for (int i = 0; i < num; i++)
cout << x[i] + 1 << "\t";
cout << endl;
}
int main()
{
int n;
cout << "请输入皇后的个数(n>=4) :" << endl;;
cin >> n;
Queen Q{n};
int res = Q.SetQueen();
cout << "所有解的个数为: " << res << endl;
return 0;
}