n皇后问题描述:
在n*n的国际象棋棋盘上放置n个皇后,使得这n个皇后两两均不在同一行,同一列,同一条对角线上,求解合法的方案数。
求解思路:
如果将排列好的n皇后的列号依次写出,那就会是一个1~n的全排列,所以只需要枚举1~n的所有排列,查看每个排列对应的放置方案是否合法,统计合法的方案即可。
代码如下(8*8棋盘)【暴力法】:
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 12;
int n, P[maxn], hashTable[maxn] = { false };
int countt = 0;//记录一共有多少组解
int generateP(int index)
{
if (index == n + 1)
{
bool flag = true;
for (int i = 1; i <=n; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (abs(i - j) == abs(P[i] - P[j]))
flag = false;
}
}
if (flag)
{
countt++;
for (int i = 1; i <=n; i++)
{
printf("%d",P[i]);