[数据结构]打印蛇型矩阵的程序设计
2004-08-16 01:07
281 查看
在网上看到一位朋友问蛇型矩阵问题,便随手写了一个,也顺便在此谈谈设计方法。
蛇型矩阵的设计并不难,设计的关键在于找路线。一蛇型矩阵如下:
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 10
void main()
{
int a
,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");
}
}
蛇型矩阵的设计并不难,设计的关键在于找路线。一蛇型矩阵如下:
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 10
void main()
{
int a
,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");
}
}
相关文章推荐
- [数据结构]打印蛇形矩阵的程序设计之方法二
- 数据结构-顺时针打印矩阵
- 数据结构-剑指offer-顺时针打印矩阵
- 【数据结构机试复习5】 顺时针打印矩阵 & 24点
- 多核计算与程序设计 - 06 基本算法和数据结构 之三 哈希表与哈希链表
- 顺时针打印矩阵
- 剑指offer(21):顺时针打印矩阵
- 牛客面试算法题精讲【个人总结】-矩阵的转圈、旋转90度、“之”字形打印
- 2017年第0届浙江工业大学之江学院程序设计竞赛决赛 J: qwb又偷懒了 [BIT]【数据结构】
- 数据结构与算法设计--顺时针打印矩阵
- 数据结构值行逻辑链接表实现矩阵运算(参考整理严蔚敏数据结构)
- 螺旋矩阵2——顺时针打印任意大小的矩阵
- 剑指offer-顺时针打印矩阵-php
- 打印蛇形矩阵
- 顺时针打印矩阵
- python数据结构学习笔记-2016-10-28-02-使用链表实现稀疏矩阵
- 5-2-三元组顺序表(稀疏矩阵)-数组和广义表-第5章-《数据结构》课本源码-严蔚敏吴伟民版
- Java打印程序设计
- 练习1-12:编写一个程序,以每行一个单词的形式打印其输入(C程序设计语言 第2版)
- 面试题20:顺时针打印矩阵递归和非递归两种方式实现