N皇后(1000~ 1000000)。
1.要求:
- 任意输入一个整数N, 103 £ N £ 106。
- 在普通个人计算机上,对输入N,3分钟内给出一个皇后不冲突的方案。
- 输出到磁盘。保存输出文件名为“N.txt”。N.txt用32位无符号整数的二进制存储,数值范围从0 ~ N-1;统一用大端(Big-Endian)。
- 提供独立的检验程序和代码,检验所输出文本文件中的皇后是否冲突。
2.变量说明
MAXN //最大皇后个数
int N //皇后个数
int[] Pos //皇后位置数组Pos[N]:下标为行号,对应值为列号
int[][] CollTable = new int[MAXN * 2][2]; //冲突表
冲突表,分别记录对角线上的冲突数 [][0] 正对角线 [][1] 负对角线
* 正对角线 行数+列数 负对角线 列数-行数+N-1
* 以N=6为例
* 正对角线 负对角线
* (0,0) 0 5
* (0,5) 5 10
* (5,5) 10 5
* (5,0) 5 0
主对角线 负对角线
3.算法说明(随机重爬)
a.随机生成棋盘,使不同行不同列各有一个皇后
b.获取冲突数,判断是否为0,为0则执行e,否则执行c
c.判断迭代次数是否超出范围,迭代次数过多和可能陷入局部最优,是的话执行a,否则执行d
d.随机的不断交换皇后位置,通过计算对角线皇后冲突数,选择最小冲突,执行b
e.输出结果,计算运行时间
4.程序流程图
5.测试结果
测试截图
测试数据
皇后个数 |
100 |
1000 |
10,000 |