蛇形(来形)矩阵

蛇形(回形)矩阵

代码如下:

/*  
	蛇形(回形)矩阵的实现:
	解题思路:
		整体思路:每一圈的数值都是连续的,所以我们一圈一圈的赋值
		对一圈的初始化:
				1:设置(p,p)每一圈最左上角的坐标
				       (q,q)每一圈最右下角的坐标
				2:对每一圈分四部(上,右,下,左)分别初始化
				   为了使这四步对称(赋值个数相同),按下图这样初始化
				   1的位置初始化--->上
				   2的位置初始化--->右
				   3的位置初始化--->下
				   4的位置初始化--->左

		1 1 1 2
		4     2
		4	  2
		4 3 3 3
*/

#include<stdio.h>
#include<stdlib.h> //system
#define LENTH 100  //数组默认维数

void snack_matrix(int n)
{
	int array[LENTH][LENTH] = {0};

	int p = 0;  //每一圈(正方形)最左上角坐标(p,p)
	int q = n-1;//每一圈(正方形)最右下角坐标(q,q)
	int num = 1;//数组中存放的值,存放一个后+1
	int i;

	while(p < q)
	{	/*初始化----->上*/
		for(i=p;i<q;++i)
		{
			array[p][i] = num;//行坐标不变,列坐标:p--->q-1
			num++;
		}
		/*初始化----->右*/
		for(i=p;i<q;++i)
		{
			array[i][q] = num;//列坐标不变,列坐标:p--->q-1
			num++;
		}
		/*初始化----->下*/
		for(i=q;i>p;--i)     
		{
			array[q][i] = num;//行坐标不变,列坐标:q--->p+1
			num++;
		}
		/*初始化----->左*/
		for(i=q;i>p;--i)
		{
			array[i][p] = num;//列坐标不变,行坐标:q--->p+1
			num++;
		}

		p++;//为下一个圈做准备
		q--;
	}

	if(n%2 != 0) //维数是奇数,最中间一个得单独赋值(此时p=q)不进入while循环赋值
	{
		array[n/2][n/2] = num;
	}

	for(i=0;i<n;++i)
	{
		for(int j=0;j<n;++j)
		{
			printf("%d\t",array[i][j]);
		}
		printf("\n");//输满一行后换行
		printf("\n");
	}
}
int main()
{
	system("mode con cols=100 lines=100");
	system("color 0A");
	int n;
	
	printf("please input the size of matrix:\n");
	scanf("%d",&n);

	snack_matrix(n);
	return 0;
}
蛇形(来形)矩阵