代码其实只写了4个皇后,当做回溯法模板用吧–
/*N皇后问题 回溯模板 m*n棋盘放皇后位置*/
#include <iostream>
using namespace std;
int main()
{
int a[10];
int i=1;
a[i]=1;
while (1)
{
int g=1;
for(int k=i-1;k>0;k--)
if(a[i]==a[k] || abs(a[i]-a[k])==abs(i-k)) g=0; // 检测约束条件,不满足则返回
if(g && i==4)
{
for(int nn=1;nn<5;nn++) cout<<nn<<","<<a[nn]<<" "; //输出一个解
cout<<endl;
}
if(i<4 && g) {i++;a[i]=1;continue;}
while(a[i]==4 && i>1) i--; // 向前回溯
if(a[i]==4 && i==1) break; //退出循环结束探索
else a[i]++;
}
return 0;
}