



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要: 本文对一类螺旋方阵问题的算法进行了分析,分别从非递归和递归的角度提出了“海龟法”、“分割法”和“递归法”三种算法。 关键词:螺旋方阵,算法,递归 1前言 -全国青少年信息学(计算机)奥林匹克竞赛常常要用到许多经典算法,比如约瑟夫问题、螺旋方阵、汉诺塔、八皇后问题等,而螺旋方阵问题是其中较为常用的一种。这类问题的算法分析对于计算机图形学、解析几何中的相关问题都有一定的启发性。尽管现有算法已取得了令人振奋的成绩,但依然具有一定的片面性,或者说过于复杂。实际上,这个问题有不同的解决算法,鉴于这个问题具有一定的典型性,本文针对信息学奥林匹克竞赛这一问题进行了全面系统的分析、归纳,从不同的角度对这个问题的算法进行分析并通过程序实现。使读者对这个问题在算法选择上有更大的余地,从而避免算法的单一性,同时对于类似相关问题的解决也有一定的启发和帮助。 2问题的描述与分析 关于螺旋方阵的输出主要是指将一些数据或符号按照一定的顺序输出到计算机的屏幕上或者是输出到一个指定的文件中去,输出的几种常见情况如下图(为简单起见,以输出5阶的数字螺旋方阵为例): 图1 图2 图3 图4 图1由外及里顺时针;图2由外及里逆时针;图3由里及外顺时针;图4由里及外逆时针 在实际应用中,输出的内容可以不尽相同。在上面的图1至图4中,按螺旋顺序输出的数显然有一定的规律,而实际输出的顺序往往不是按照螺旋顺序,通常是将上图中的数据按行(或按列)输出,因此这类问题的关键在于如何将有规律的数据与实际输出时的先后顺序对应起来。下面采用不同的算法来实现。 3 采用不同算法解决螺旋方阵的输出 3.1 非递归算法 3.1.1 “海龟”算法(顺时针,由外及里) 参照海龟行走的做法,用一对变量A,B模拟海龟头的方向,根据屏幕坐标的特点,A、B的取值和“海龟头”方向有这样的关系:(0,1)表示向右;(0, -1)表示向左;(-1,0)表示向上;(1,0)表示向下;用另一对变量X,Y模拟海龟位置,“海龟”每前进一步,它的新位置即为X=X+A,Y=Y+B;要海龟向右转,就改变A、B的值,根据数学知识可以得出具体的变换公式是:C=A;A=B;B=-C。下面用自然语言对算法进行描述:让海龟先走n步,然后右转,再走n-1步,再右转,再走n-1步,再右转,再走n-2步,再右转,再走n-2步如此类推,直到海龟前进的步数为0时停止;而每当“海龟”前进1步,就在它位置上显示一个数字,那么前进n步即重复执行“X:=X+A,Y:=Y+B”语句n次。但如何让下两个循环的重复次数都为n-1呢?解决的方法是:循环n次后,让n的值减少0.5,然后再转回执行同样的循环。扩展到显示n位数,则须留n列的位置,也就是说,海龟水平方向每次得前进n步,才有足够的位置显示大一点的数字方阵,需把Y=Y+B改成Y=Y+n*B就行了。“海龟”算法的优点是简洁清晰。 3.1.2 “分割”算法(逆时针,由外及里) 设螺旋方阵对应的一般二维数组如下: a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24 a30 a31 a32 a33 a34 a40 a41 a42 a43 a44 图5 按逆时针方向从外向内,一层层给下标变量赋值,由于阶数n的任意性,需考虑以下几个问题:层数k与阶数n的关系式,n由用户输入,k根据n来计算;定义变量value,赋值时让其自增;分析每层矩形四条边元素的下标变化规律,将方阵元素按逆时针方向分成四个部分:方阵左半边(三列),方阵下半边(二行),方阵右半边(两列),方阵上半边(二行)。 具体算法思想:以5阶方阵为例,可判断 k=(n+1)/2=3,用循环控制产生的层数,语句为for(k=0,k (n+1)/2;k+)。 Step1:找出方阵左半边列规律:列下标正好是层数k的值,行下标在第一列从0变到4,第二列从1变到3,在第三列从2变到2,故推导出n阶螺旋方阵左半边由外到内的列循环结构:for(i=k;i n-k;i+) matik=value+;此循环执行一次,产生一列元素,循环执行的次数由外循环来控制。 Step2:找出方阵下半边行规律:行下标从4变到3,每层取值为nk1;列下标由外到内第一行从1变到4(a40已产生),第二行(a30 、a31已产生)从2变到3,第三行只有一个元素a22,故推导出n阶螺旋方阵下半边行循环结构:for(i=k+1;i =k;i-) matin-k-1=value+; Step4:找出方阵上半边行规律:已经产生了的元素不能再重新赋值,而行下标可用层次k来表示,列下标与右半边行下标变化规律一样,由此推断出上半边的行可由下列循环结构完成:for(i=n-k-2;i k;i-) matki=value+。 当k取一个值时,以上四个循环依序各产生一列或一行元素,由此产生一层元素,当k在变化范围0(n+1)/2内依次取值时,四个循环轮流执行,一个数字螺旋方阵就这样生成了。 32 递归算法 分析图五容易看出,当由外及里顺时针旋转时,最外层数据输出后,内层的图形只不过是层数减少了,即问题的规模变小了,但问题的性质没有发生变化,新问题和原问题仍然可以采用相同的解法。所以这一问题完全可以采用递归的方法来求解。具体的算法描述如下。 Step1:初始化。把需要输出的数据放入一维数组,设为b1.n*n。因为是n阶方阵,所以全部元素共有n2个,输出b1到bn*n的顺序是方阵顺时针旋转的顺序。 Step2:把b数组中的每个元素放入到二维数组aij(图5)中去,如b1放入a00中,b2放入a01中,b6放入a14中,其它元素依次放入。 Step3:按行输出数组元素aij即可。 上述算法中,难点在于如何将b数组放入到aij数组对应的分量中去。为此,对step2进行求精并使用递归来解决。具体做法:将数组a初始化为0。设置变量direction作为方向标志。当direction为1、2、3、4时,分别表示向右、向下、向左、向上。并编写如下的递归子程序walk(x,y,direction,k)。其中参数x,y表示数组的下标。k是计数器。当 kn*n 为递归出口。 case direction of right 1: if到右边界then 向下拐 else 向右输出; down 2: if到下边界 then 向左拐 else 向下输出; left 3: if到左边界 then 向上拐 else 向左输出; up 4: if 到上边界 then 向右拐 else 向上输出。 end;end case 33 算法实现 限于篇幅,本文仅给出递归算法的主要程序段(pascal语言) procedure walk(x,y,direction,k:integer); begin if kn*n then 按行输出a数组; ax,y:=bk; case direction of right1: if (y=n) or (ax,y+10) then walk(x+1,y,2,k+1) else walk(x,y+1,1,k+1); down2: if (x=n) or (ax+1,y0) then walk(x,y-1,3,k+1) else walk(x+1,y,2,k+1); left 3: if (y=1) or (ax,y-10) then walk(x-1,y,4,k+1) else walk(x,y-1,3,k+1); up 4: if (x=1) or (ax-1,y0) then walk(x,y+1,1,k+1) else walk(x-1,y,4,k+1) end; beginmain fillchar(a,sizeof(a),0); writeln(please input a integer for n:); readln(n); walk(1,1,1,1); end.end main 4 结束语 关于螺旋方阵的输出算法主要有上述几种,其他几种方阵的输出,可以仿照上述的算法分析加以实现。相对而言,递归算法较为简洁,但是时间复杂度要高一些,对于输出高阶螺旋方阵时,时间很长。另外在空间复杂度方面,采用数组这种数据结构,显然有一定的局限性,如果使用链表来存储,将会尽可能地避免空间不足的现象。另外,上述问题也可以使用一个模板式的子程序来完成,这时要求输入的参数要包括:从外还是从里螺旋、顺时针还是逆时针,起点坐标等参数,对于从里向外螺旋时,还要考虑螺旋方阵的阶数是奇数还是偶数,分别给予不同的处理。 参考文献 1 潘金贵等 现代计算机常用数据结构和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版九年级物理全一册《第二十一章 电磁波及其作用》单元检测卷及答案
- 2025年小学统考道法真题及答案
- 2025年外科出科护理试卷及答案
- 海航网络笔试题目及答案
- 2025年社区笔试考试试题及答案
- 2025年昌平高考地理题库及答案
- 以往中考语文试卷及答案
- 化学与计算科学伦理联系试题
- 化学人类命运共同体素养全球视野评价试题
- 古诗抄写考试题及答案
- 保险基础知识培训
- 口腔药品急救知识培训课件
- 2025年教育系统学校中层后备干部选拔考试题(含答案)
- 金匮要略-黄芪桂枝五物汤
- J17J177 钢丝网架珍珠岩复合保温外墙板建筑构造
- 酒店账单-水单-住宿
- 手游经典案例《王者荣耀》的营销分析
- SEPIC主要参数设计软件
- GB/T 24002.1-2023环境管理体系针对环境主题领域应用GB/T 24001管理环境因素和应对环境状况的指南第1部分:通则
- 2023版思想道德与法治专题5 明确价值要求 践行价值准则 第2讲 坚定社会主义核心价值观自信
- 2023年自考全国10月财务管理学试题+答案
评论
0/150
提交评论