zoukankan      html  css  js  c++  java
  • N阶魔方的C#实现

    算法:

    1. N为奇数:

                    1 第一个数“1”填入(0,(n-1/2)位置,记录该数填入位置为(i,j)

                    2 下一个数填入位置初步定为(i-1j-1), 等价转换标记为(i',j');

                    3 判断i’,j’:

                                    I’< 0, j’> 0: 填入位置变为:(n-1, j’);

    I’< 0, j’< 0: 填入位置变为:(1, 0);

    I’> 0, j’> 0: 填入位置变为:(I’, j’-1);

    I’> 0, j’> 0: 填入位置变为:(I’, j’);

                    4 继续判断3)中确定的点坐标(假设为(I’’, j’’)):

                                    如果没被填过,则最终确定为(I’’,j’’);若已经填过,则变为(I’’+2, j”+1),并继续判断,直到该点没被填写。

                    5)在4)中确定的位置处填入数,进入2)填写下一数。

    2. N4的倍数:

    采用对称元素交换法。 首先把数1n×n按从上至下,从左到右顺序填入矩阵,然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对称交换,即a(i,j)a(n+1-i,n+1-j)交换,所有其它位置上的数不变。

    3. N4m + 2的偶数:

     1)n阶方阵分为四个小魔方阵ABCD如下排列:      
      B   C  
      D   A  
    u=n/2=2*m+1,分为1~u*u,u*u+1~2*u*u,2*u*u+1~3*u*u,3*u*u+1~4*u*u   即在调用子函数的时候分别如下面传递参数:  
      A(0),B(u*u),C(2*u*u),D(3*u*u)  
     分别在ABCD中按照前面的填法把奇数阶填好(注意加上所传参数作为基数,每一个元素都要加上这个值),最后做如下交换:  
      (1)B中第0~(m-1)-1行中元素与C中相对应元素交换 (注意:若m=1,不作此操作!)
      (2)D中第(n-1)-m+1~(n-1)m行的每行中的元素与A中相对应元素交换  
      (3)交换D:(u+m,m)A中对应元素(矩阵中心值)  
      (4)交换D:(n-1,m)A中对应元素(实际为还原AD中原矩阵中最大值到各自位置)  
       
      所谓对应位置,指相对于小魔方阵的左顶角的相对的行列位置

     

    参考:

    http://zhidao.baidu.com/question/124807422.html

     C#实现源码
  • 相关阅读:
    Python:三元运算
    SaltStack部署服务及配置管理apache+php-第二篇
    SaltStack介绍及简单配置-第一篇
    git基础常用维护命令
    MySQL设置只读模式
    运维杂记-05
    Tomcat的配置,设置内存,获取用户IP
    Linux系统巡检项目
    Redis维护
    nginx配置文件说明
  • 原文地址:https://www.cnblogs.com/Langzi127/p/1673335.html
Copyright © 2011-2022 走看看