#include<cstdio>
#include<cmath>
const int maxn = 11;
int count = 0;
int n, P[maxn], hashTable[maxn] = { false };
void generateP(int index)
{
if (index == n + 1)
{
for (int i = 1; i <= n; i++)
{
printf("%d", P[i]);
}
printf("\n");
count++;
}
for (int x = 1; x <= n; x++)
{
if (hashTable[x] == false)
{
bool flag = true;
for (int pre = 1; pre < index; pre++)
{
if (abs(index - pre) == abs(x - P[pre]))
{
flag = false;
break;
}
}
if(flag)
{
P[index] = x;
hashTable[x] = true;
generateP(index + 1);
hashTable[x] = false;
}
}
}
}
int main()
{
n = 8;
generateP(1);
printf("%d", count);
}
这是我写的一个8皇后代码
这是直接执行的结果,count的结果正确,但是中间的情况会缺,而且每次执行缺的都不一样
这是调试的结果,没有设断点,count结果也正确,中间也不缺情况
这是为什么