/**************************************************
程序:奇数魔方矩阵的实现
完成者:小单
完成时间: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 3
int 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;
}