直接上码:
#include <iostream>
using namespace std;
void NQueens(int **a, int row, int n)
{
if(row <= n) {
for(int col = 0; col < n; col++) {
bool flag = true;
// <判断同列上无冲突
for(int i = 0; i <= row; i++) {
if(a[row-i][col] == 1)
{
flag = false;
break;
}
}
// <判断斜线上无冲突
for(int i = 1; row-i>=0 && col-i >= 0; i++) {
if(a[row-i][col-i] == 1)
{
flag = false;
break;
}
}
for(int i = 1; row - i >=0 && col+i <= n; i++) {
if(a[row-i][col+i] == 1)
{
flag = false;
break;
}
}
if(flag) {
a[row][col] = 1;
if(row < n-1)
NQueens(a,row+1,n);
else if(row == n-1) {
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
cout<<"-------"<<endl;
}
}
a[row][col] = 0; // <回溯
}
}
}
int main()
{
int **a = new int*[4];
for(int i = 0; i < 4; i++)
a[i] = new int[4];
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++)
a[i][j] = 0;
NQueens(a,0,4);
return 0;
}