奇数魔方矩阵的实现

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



                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值