📄 004-queen_num.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long sum, n_queen;
clock_t start_time,end_time;
void queen(long row, long left_clash, long right_clash) {
long fsb_pos, cur_pos;
if (row != n_queen) {
fsb_pos = n_queen & (~(row | left_clash | right_clash));
while (fsb_pos != 0) {
cur_pos = fsb_pos & (-fsb_pos);
fsb_pos = fsb_pos - cur_pos;
queen(row + cur_pos, (left_clash + cur_pos) << 1, (right_clash + cur_pos) >> 1);
}
}
else {
sum++;
}
}
int main() {
int n;
char ch;
printf("2007级唐郑熠—求n皇后问题解法数量\n");
printf("(为获得最快得的运算速度,只显示解法数量)\n");
do {
printf("\n");
printf("请输入n(n<33):");
scanf("%d", &n);
getchar();
if (n < 1 || n > 32) {
printf("n要在1~32之间!\n");
continue;
}
sum = 0;
n_queen = 1;
printf("正在计算%d皇后问题解法数量……\n", n);
n_queen = (n_queen << n) - 1;
start_time = clock();
queen(0, 0, 0);
end_time = clock();
printf("共有%ld种解法, 耗时%ld毫秒\n", sum, end_time - start_time);
printf("是否继续(y/n):");
ch = getchar();
} while (ch == 'y');
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -