幻方解法之horse法生成奇阶幻方

/*

程序思想参考百度百科上"幻方法则" 2015-01-27

http://baike.baidu.com/link?url=7ynfkLYfGv4f7PtQkuH4PSn_8IFr_QFAN-Bnsk0hmd2uk6WITW7r1d8o7IQJ1IL3bNRHbpHYbVXpDAvNbyJBDK


其实在维基百科上有更全面的,搜索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步以跳马步,依次填入234…,若出到方阵下方,把该数字填到本该填数所在列上方相应的格;若出到方阵右方,把该数字填到本该填数所在行的左方相应的格;如果落步格已有数字,则向下移一格继续填写。如下图用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

}


//测试过程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值