标题1.问题描述:
N皇后问题
在n*n格的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一对角线上,问有多少种摆法。
利用回溯法,代码如下
#include<iostream>
#include<math.h>
using namespace std;
int a[100], n; //数组定义皇后的个数
int check(int k)
{
int i;
for (i = 1; i <= k - 1; i++) //从第一个皇后检查到第K-1个皇后,发现同行同列或者同对角就返回0
{
if (abs(a[i] - a[k]) == abs(i - k)||(a[i] == a[k]))
return (0);
}
return (1); //检测成功就返回1
}
void output(int n)
{
int i;
for (i = 1; i <= n; i = i + 1) //当深度遍历到底部时,输出一组解
{
cout << a[i] << " ";
}
cout << endl;
}
void backdate(int n) //回溯函数
{
int k;
a[1] = 0;
k = 1;
while (k > 0)
{
a[k] = a[k] + 1;
while ((a[k] <&