回溯法解决N皇后问题(C++)
#include<iostream>
#include<math.h>
using namespace std;
int x[5];
int y[5];
int n=4;
int place(int k,int j)
{
for(int i=1;i<=k-1;i++)
{
if (abs(x[i] - k) == abs(y[i] - j) || y[i] == j)
{
return 0;
}
}
return 1;
}
void nQueen(int k,int j)
{
if (k == 1)
return;
while (j <= n)
{
if (place(k, j))
{
x[k] = k;
y[k] = j;
k++;
j = 1;
}
else
{
j++;
}
if (j == n + 1)
nQueen(k - 1,y[k-1]+1);
}
}
int main()
{
x[1]=1,y[1]=1;
int m=0;
cout<<n<<"皇后问题的解为:"<<endl;
for (int i = 1; i <= n; i++)
{
y[1] = i;
nQueen(2, 1);
if (x[n] != 0)
{
for (int i = 1; i <= n; i++)
cout << "(" << x[i] << "," << y[i] << ")" << endl;
x[n] = 0;
m++;
}
cout <<"************"<< endl;
}
cout << n << "皇后问题共有" << m << "个不同的解" << endl;
return 0;
}