#include <stdio.h>
#define SIZE 8
unsigned int lines[SIZE];
unsigned int LINE_MAX = 1 << (SIZE - 1);
void reset()
{
for (int i = 0; i < SIZE; ++i)
{
lines[i] = LINE_MAX;
}
}
int moveNext()
{
for (int i = 0; i < SIZE; ++i)
{
if (1 & lines[i])
{
lines[i] = LINE_MAX;//
}
else
{
lines[i] >>= 1; //
return 1;
}
}
return 0;
}
int check()
{
for (int i = 0; i < SIZE - 1; ++i)
{
int diff = 1; //偏移量
int j = i + diff;
while (j < SIZE)
{
if (lines[i] & lines[j]) return 0; // same column
if ((lines[i] >> diff) & lines[j]) return 0;
if ((lines[i] << diff) & lines[j]) return 0;
++diff;
++j;
}
}
return 1;
}
int main()
{
reset();
int count = 0;
while(moveNext())
{
if (check()) ++count;
}
printf("%d", count);
getchar();
}
八皇后问题
最新推荐文章于 2023-07-07 14:04:01 发布