RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
[数据结构]打印蛇型矩阵的程序设计
  • 作者:xiaoxiao
  • 发表时间:2020-12-23 10:35
  • 来源:未知

在网上看到一位朋友问蛇型矩阵问题,便随手写了一个,也顺便在此谈谈设计方法。

蛇型矩阵的设计并不难,设计的关键在于找路线。一蛇型矩阵如下:

    1    2    9   10   25

    4    3    8   11   24

    5    6    7   12   23

   16   15   14   13   22

   17   18   19   20   21我们把蛇型矩阵走的方向看成两条路线和两个跳线,数字1不看,路线1是从上向下再向左,如2-3-4和10-11-12-13-14-15-16,路线2是从左向右再向上,如5-6-7-8-9和17-18-9-20-...-25。跳线是连接两条路线路径,它是有特征的,跳线1是线路2转到线路1的“跳跃”,特征是列加一。而跳线2是线路1转到线路2的“跳跃”,特征是行加一。

由上分析,我们可以得出蛇型矩阵的走法是从a[0][0]开始,跳到线路1,跳到线路2,再跳到线路1……我们可以设可k为主对角线上的元素个数,用以限制行列标记i,j不越界。而跳线的设定,我们可以发现它是和k有关的。

附源程序如下:

/** Copyright (c) 2004,安徽大学02自动化专业* All rights reserved.* * 文件名称:SnakeMatrix.c* 文件标识:无* 摘    要:打印蛇型矩阵* * 当前版本:1.0* 作    者:Yu* 完成日期:2004年8月16日** 取代版本:1.0 * 原作者  :Yu* 完成日期:2004年8月16日*/#include #define N 10void main(){ int a[N][N],tag = 1,i = 0,j = 0,num = 2,k; a[0][0] = 1; for (k = 1; k < N; k++)//k控制i和j的界限 {  if (k % 2 ==1)//线2跳线1  {   j++;  }  else//线1跳线2  {   i++;  }  switch (tag)  {  case 1://走线路一   while (i <= k)   {    a[i][j] = num++;    i++;   }   i--;   j--;   while (j >= 0)   {    a[i][j] = num++;    j--;   }   j++;   tag = 2;   break;  case 2://走线路二   while (j <= k)   {    a[i][j] = num++;    j++;   }   j--;   i--;   while (i >= 0)   {    a[i][j] = num++;    i--;   }   i++;   tag = 1;   break;  } } for (i = 0; i < N; i++)//输出结果 {  for (j = 0; j < N; j++)   printf("%5d",a[i][j]);  printf("/n/n"); }}