3*3三阶魔方阵解决方法

3*3三阶魔方阵
用数组求一个3*3的三阶魔方我找了很多关于这方面的资料但是没有有我想要的!
要求: 算法和代码!
三阶魔方阵:  
  8 1 6  
  3 5 7  
  4 9 2  
  结果打印出1~n*n的自然数构成的魔方阵

------解决方案--------------------
如下是算法伪代码:
C/C++ code

int[][] MagicMatrix ( int n )
{
    //Odd order.
    if ( mod ( n, 2 ) )
        [ mj, mi ] = MakeMeshGridSquareMatrix ( n );  // mj : mesh along row, 
                                                      // while mi : mesh along column
                                                      // both mj and mi are square matrix
        // matrix operation
        A = mod ( mi + mj - ( n + 3 ) / 2.0, n );
        B = mod ( mi + 2 * mj - 2, n );
        M = n * A + B + 1;

    // Doubly even order.
    elif ( !mod ( n, 4 ) )
        [ mj, mi ] = MakeMeshGridSquareMatrix ( n );
        K = ( floor ( mod ( mi, 4 ) / 2.0 ) == floor ( mod ( mj, 4 ) / 2.0 ); // K is a logic matrix
                                                                              // each element judge by
                                                                              // mj and mi
        M = MakeSquareMatrix ( n ); // to make array which from 1 to n * n as a n * n square
        M [ K ] = n * n + 1 - M [ K ];  // modify matrix M each element from matrix K
    
    // Singly even order
    else
        p = n / 2;
        M = MagicMatrix ( p );      // Recursive call procedure;
        M = [             M             M + 2 * p ^ 2
              M + 3 * p ^ 2             M + p ^ 2     ]   // make a new matrix which elements layout
                                                          // like this
        if ( n == 2 )
            return;     // error 
        end if

        i = MakeRank ( p ); // get one column which elements are from 1 to p;
        k = ( n - 2 ) / 4.0;
        j = MakeRow ( k, n ); // make a row that [ 1 to k join with (n - k + 2) to n ];
        M [ Rank(i, i + p), j ] = M [ Rank(i + p; i), j ]; // Rank 表示含有指定两个元素的列向量
          i = k + 1;
        j = Row ( 1, i );      // Row 表示含有指定两元素的行向量
          M [ Rank(i, i + p), j ] = M [ Rank(i + p, i), j ];
    end if
}