算法思想:
1、建立一个一维数组(Array[1..64] of Integer)和一个Strings,数组用于保存结果,Strings用于保存初始值
(1..8为第1行,9..16为第2行...;1,9,17..57为第1列,2,10,18..58为第2列...)
2、将数据的元素都初始化为0
3、将1,2,3..8个各生成8个,存放到Strings中,存放的顺序不必考虑,只需每个数字都是8个就可以了
4、生成一个随机数,第一次的范围在0..63中,将随机数作为Strings的Index,从Strings中取出数字,
同时将该Index的数字删除,并将随机数的范围减1,变为0..62
5、将4中取出的数字保存到数组中,方法为:先扫描行,判断该数字是否已存在该行,如果有转到下一行,
如果没有,则找到该行中第1个为0的元素,并同时判断该列中是否已存在该数字,如果有则转到该行
下一个为0的元素,直到所在的列没有与其相同的数字为止
6、重复4-5,直到Strings为空;
注:如果直接使用上面的算法时,会产生对角线上的数字都一样
改进算法:保存也用随机的
即将数组的下标存放到另一个Strings中,然后每次要保存的时候就从该Strings中提取一个
下标,如果该位置符合要求,则将该下标从Strings中删除