生成n*n蛇形矩阵的算法

在描述算法之前,先看看下面的5*5的表格:

1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25

上面的表格很容易看出规律。就是从左上角第一个格开始(起始为1),然后延右上角到左下角的斜线。先从下到上,再从上到下。开始按数字递增排列。也就是说每一个斜线上分别有如下几组数字:

1    2 3     4 5 6       7 8 9 10      11 12 13 14 15          16 17 18 19      20 21 22      23 24       25

由于是先从上到下(1可以看做是从上到下),再从下到上,很象一条蛇,因此,该数字表格也可称为蛇形矩阵。现在要与一个方法(或函数),方法的参数是一个int类型,表示n,方法返回一个二维数组,表示要获得的往返接力数字表格。

实际上,这个算法并不复杂,只需要从分别获得1至n^2中每个数字对应的二维数组的坐标就可以了。先拿这个5行5列的表格来说,求出上面每组数组对应的坐标(起始位置为0)。

第0组

第1组

第2组

第3组

第4组

第5组

第6组

第7组

第8组

1

2 3

4 5 6

7 8 9 10

11 12 13 14 15

16 17 18 19

20 21 22

23 24

25

(0,0)

(1,0)   (0,1)

(0,2)   (1,1)   (2,0)

(3,0)   (2,1)   (1,2)   (0,3)

(0,4)   (1,3)   (2,2)   (3,1)   (4,0)

(4,1)   (3,2)   (2,3)   (1,4)

(2,4)   (3,3)   (4,2)

(4,3)   (3,4)

(4,4)

时间: 2024-09-30 00:45:18

生成n*n蛇形矩阵的算法的相关文章

[经典面试题]蛇形矩阵(螺旋矩阵)

[1.打印蛇形矩阵] Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. [代码] /**----

[算法系列之十五]Strassen矩阵相乘算法

引言 Strassen矩阵乘法是一种典型的分治算法.目前为止,我们已经见过一些分治策略的算法了,例如归并排序和Karatsuba大数快速乘法.现在,让我们看看分治策略的背后原理是什么. 同动态规划不同,在动态规划中,为了得到最终的答案,我们需要把一个大的问题"展开"为几个子问题("expand" the solutions of sub-problems),但是在这里,我们会更多的谈到如何把一些子解决方案组合到一起.对于一般问题,他们的子问题的解决方案是对等的,他们

java实现任意矩阵Strassen算法_java

本例输入为两个任意尺寸的矩阵m * n, n * m,输出为两个矩阵的乘积.计算任意尺寸矩阵相乘时,使用了Strassen算法.程序为自编,经过测试,请放心使用.基本算法是: 1.对于方阵(正方形矩阵),找到最大的l, 使得l = 2 ^ k, k为整数并且l < m.边长为l的方形矩阵则采用Strassen算法,其余部分以及方形矩阵中遗漏的部分用蛮力法. 2.对于非方阵,依照行列相应添加0使其成为方阵. StrassenMethodTest.java package matrixalgorit

C# 生成高质量缩略图程序—终极算法_实用技巧

先看代码: using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; /**//// <summary> ///  /// **生成高质量缩略图程序** ///  ///  File: GenerateThumbnail.cs ///  ///  Author: 周振兴 (Zxjay 飘遥) ///  ///  E-Mail: tda7264@163.com

银河系列原创教程

本文为原创,如需转载,请注明作者和出处,谢谢!     本文为银河系列原创技术文章,主要包括Struts 2入门系列教程.Struts1.x入门与提高系列教程.WebService大讲堂之Axis2系列教程.Weblogic10+EJB3入门教程.AJAX系列教程.SQL Server2005杂谈系列教程.算法系列教程.这些文章均为笔者经验总结,有的系列文章还未完成,待不断完善中... Struts 2入门系列教程  1.  第一个Struts2程序  2.  处理一个form多个submit

《MATLAB智能算法超级学习手册》一一1.2 矩阵的表示

1.2 矩阵的表示 MATLAB智能算法超级学习手册矩阵和向量是一样的,用来描述某一个问题的方程组的系数.由方程组的系数和常数构成的方阵.矩阵包括数值矩阵.符号矩阵.特殊矩阵等3种基本样式. 1.2.1 数值矩阵的生成1.实数矩阵的输入MATLAB的强大功能之一体现在能直接处理向量或矩阵.前提是用户根据具体的问题输入待处理的向量或矩阵. 一般简单的定义矩阵,可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限:不同的行用分号(:)分隔. 所有元素处于一个方括

矩阵的乘法算法

一般矩阵乘法算法: 原理:矩阵相乘最重要的方法是一般矩阵乘积.它只有在第一个矩阵的栏数(column)和第二个矩阵的列数(row)相同时才有定义.一般单指矩阵 乘积时,指的便是一般矩阵乘积.若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB会是一个m×p矩阵.其乘积矩阵的元素如下面式子得出: 代码如下: struct mat{ int n, m; double data[MAXN][MAXN]; }; int mul(mat& c, const mat& a, const mat&

fortran如何生成高斯矩阵

问题描述 fortran如何生成高斯矩阵 fortran中生成的一个随机矩阵如何转换成一个均值为0标准差为2的高斯矩阵 解决方案 http://fcode.cn/code_prof-33-1.html 解决方案二: Module ran_mod Implicit None! ran return a uniform random number between 0-1 ! norma return a normal distribution contains function ran() !ret

C++实现矩阵原地转置算法_C 语言

本文实例描述了C++实现矩阵原地转置算法,是一个非常经典的算法,相信对于学习C++算法的朋友有很大的帮助.具体如下: 一.问题描述 微软面试题:将一个MxN的矩阵存储在一个一维数组中,编程实现矩阵的转置. 要求:空间复杂度为O(1) 二.思路分析 下面以一个4x2的矩阵A={1,2,3,4,5,6,7,8}进行分析,转置过程如下图: 图中右下角的红色数字表示在一维数组中的下标.矩阵的转置其实就是数组中元素的移动,具体的移动过程如下图: 我们发现,这些移动的元素的下标是一个个环,下标1的元素移动到