回型矩阵的走法
Posted studyshare777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回型矩阵的走法相关的知识,希望对你有一定的参考价值。
不说废话,先上图
。
实现这个目标,可以把数字想像成一条蛇,蛇爬过的数字就加一。把二维数组[y][x]作为地图,y为纵轴,x为横轴。通过改变蛇的坐标让它爬起来(是不是很像贪吃蛇)。!!先上总代码:
#include <stdio.h> //地图(数组)和坐标位置 int map[100][100]; int x = 0, y = 0; //蛇的前进方向(步数) void up(int); void down(int); void left(int); void right(int); //蛇走一步留下一个数字 int num = 0; void up(int step) int i; for(i=0;i<step;i++)//向上走多少步数 num++; map[y--][x] = num; void down(int step) int i; for (i = 0; i < step; i++)//向下走多少步数 num++; map[y++][x] = num; void left(int step) int i; for (i = 0; i < step; i++)//向左走多少步数 num++; map[y][x--] = num; void right(int step) int i; for (i = 0; i < step; i++)//向右走多少步数 num++; map[y][x++] = num; int main() //自定义矩阵大小n*n int size; printf("请输入你想要的矩阵边长大小(n):"); scanf("%d",&size); //蛇开始爬动 int step; if(size%2==1)//size为奇数 for(step=size-1;step>0;step-=2) right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 //最后蛇再爬到中心位置 int middle=(size-1)/2; map[middle][middle]=++num; if(size%2==0)//size为偶数 for(step=size-1;step>0;step-=2) right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 //打印出效果 int i,j; for (i = 0;i < size; i++) for (j = 0; j < size; j++) printf(" %3d ", map[i][j]); printf("\\n"); printf("\\n"); return 0;
这些都挺简单的对吧,关键是怎么让蛇在我们希望时调头。在这我想先说说我发现的一些规律:
(9^2-1)/4=20=2+4+6+8; 10^2/4=25=1+3+...+9;
(11^2-1)/4=120=2+4+...+10; 12^2/4=36=1+3+...+11;
对于奇数(a^2-1)/4=2+4+...+(a-1); 对于偶数(b^2)/4=1+3+...+(b-1);
也许你会说这有什么用,别急,好戏还在后头。
我们要围成n*n的正方形矩阵,正方形有4条边,正好对应上面的除以4,所以,你懂我意思把。
以10*10为例,第一层每边走9步,第二层7步,第三层5步,第四层3步,第五层1步,这样就刚好把整个地图走完。
这是不是和10^2/4=25=1+3+...+9很像。
对应如图:
这样我们就可以把每条边分成4段,走完一段后蛇就调头,一直爬到终点。
有一点要注意的是,对于偶数的平方都能被4整除,蛇完整的走完循环。所以:
if(size%2==0)//size为偶数 for(step=size-1;step>0;step-=2) right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走
而对于奇数,平方后中间会剩下一个点。为了把它填满,奇数就是这样:
if(size%2==1)//size为奇数 for(step=size-1;step>0;step-=2) right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 //最后蛇再爬到中心位置 int middle=(size-1)/2; map[middle][middle]=++num;
最后希望我的方法能多少让你有些想法,谢谢。
以上是关于回型矩阵的走法的主要内容,如果未能解决你的问题,请参考以下文章