读书人

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

发布时间: 2012-05-27 05:42:30 作者: rapoo

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} 

读书人网 >C语言

热点推荐