/*
程序思想参考百度百科上"幻方法则" 2015-01-27
其实在维基百科上有更全面的,搜索Magic square即可查到,可惜太英语了,有点难,留着以后看^*^
代码环境xcode6.1 playground
几个公用函数只在第一篇显示,后面的篇章不在重复
func isMagic(s:[[Int]])->[Int]?
func printMagic(s:[[Int]])
func signed(aint: Int)->Int
func correction(k: Int, step: Int) ->Int
*/
/*
三、horse法生成奇阶幻方
对于所有的奇阶幻方,在第一行居中的方格内放1,向右走1步,下走2步以跳马步,依次填入2、3、4…,若出到方阵下方,把该数字填到本该填数所在列上方相应的格;若出到方阵右方,把该数字填到本该填数所在行的左方相应的格;如果落步格已有数字,则向下移一格继续填写。如下图用Horse法生成的5阶幻方:
23 12 1 20 9
4 18 7 21 15
10 24 13 2 16
11 5 19 8 22
17 6 25 14 3
*/
func JJHorse1(#step:Int) -> ([[Int]])?{
if (step < 3) { returnnil}
if (step % 2 ==0) { return nil}
let aRow = [Int](count: step, repeatedValue:0)
var solution = [[Int]](count: step, repeatedValue: aRow)
//要赋值的位置
var row = 0
var col = step/2
var iPut = 1 //放这个数
solution[row][col] = iPut++
var time = step * step - 1
do{
//下一个赋值的位置
var nextcol = col + 1
var nextrow = row + 2
nextcol =correction(nextcol,step)
nextrow =correction(nextrow,step)
if solution[nextrow][nextcol] != 0{
nextrow = row +1
nextrow =correction(nextrow,step)
nextcol = col
if solution[nextrow][col] != 0{
return solution
}
}
row = nextrow
col = nextcol
solution[row][col] = iPut++
}while(time-- >0)
return nil
}
//测试过程