⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 004-queen_num.cpp

📁 包含两个文件
💻 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 + -