奇数魔方矩阵的实现

来源:互联网 发布:天书世界披风进阶数据 编辑:程序博客网 时间:2024/05/13 08:35
/**************************************************程序:奇数魔方矩阵的实现完成者:小单完成时间:2013年5月7日***************************************************//********************************************************************算法思想  先在矩阵第一行中间的位置上放1,然后把数字按照升序沿着右  上角放置到矩阵中。如果越界了,就假设周围还有一个矩阵,          将数字放到那个位置上;如果那个位置已经被占据了,就跳过          该位置放到下面的位置,然后重新按照原来的方法放。  具体思想: (1) 将1放在第一行中间一列;  (2) 从2开始直到n×n止各数依次按下列规则存放:  按 45°方向行走,如向右上  每一个数存放的行比前一个数的行数减1,列数加1  (3) 如果行列范围超出矩阵范围,则回绕。  例如1在第1行,则2应放在最下一行,列数同样加1;  (4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,  则把下一个数放在上一个数的下面。*********************************************************************/#include <stdio.h>#define N 3int main(){int row = 0;int col = N/2;int cnt = 1;int OddMagicMatrix[N][N]={0};OddMagicMatrix[row][col] = cnt;while(cnt < N*N){if((row - 1 < 0 )&& (col + 1 >= N)){OddMagicMatrix[row+1][col] = ++cnt;row = row +1;}else if(row - 1 < 0){OddMagicMatrix[N-1][col+1] = ++cnt;row = N-1;col = col + 1;}else if(col + 1 >= N){OddMagicMatrix[row - 1][0] = ++cnt;row = row - 1;col = 0;}else if(OddMagicMatrix[row-1][col+1] == 0){OddMagicMatrix[row-1][col+1] = ++cnt;row = row - 1;col = col + 1;}else{OddMagicMatrix[row+1][col] = ++cnt;row = row +1;}}for(int i = 0; i < N; ++i){for(int j = 0; j < N; ++j){printf("%4d",OddMagicMatrix[i][j]);}printf("\n");}return 0;}


                                             
0 0
原创粉丝点击