由里向外的螺旋矩阵

输出N阶螺旋矩阵,如N=5时

17 16 15 14 13

18   5  4   3  12

19   6  1   2  11

20  7   8   9  10

21 22 23 24 25

思路如下:

从二维数组的第(N-1,N-1)个元素开始,分别对矩阵最外层的四条边进行赋值操作,起始值是N*N,依次递减。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <memory.h>
 5
 6 int N;
 7
 8 void generateSnake(int snake[N][N],int endRow,int endCell,int row,int cell,int start);
 9
10 int main() {
11
12     scanf("%d",&N);
13
14     int snake[N][N];
15
16     generateSnake(snake,0,0,N-1,N-1,N*N);
17
18     return 0;
19
20 }
21
22 void generateSnake(int snake[N][N],int endRow,int endCell,int row,int cell,int start) {
23
24     int ln = cell;
25     int col = row;
26     if(start > 1) {
27
28         while(col >= endCell) {
29             snake[ln][col] = start;
30 //        printf("(%d,%d)%d--",ln,col,snake[ln][col]);
31             start--;
32             col--;
33         }
34         col = endCell;
35         ln--;
36
37         while(ln >= endRow) {
38             snake[ln][col] = start;
39 //        printf("(%d,%d)%d**",ln,col,snake[ln][col]);
40             start--;
41             ln--;
42         }
43         ln = endRow;
44
45         col = endCell+1;
46         while(col <= cell) {
47             snake[ln][col] = start;
48 //        printf("(%d,%d)%d^^",ln,col,snake[ln][col]);
49             start--;
50             col++;
51         }
52         col = cell;
53         ln++;
54
55         while(ln < row) {
56             snake[ln][col] = start;
57 //        printf("(%d,%d)%d$$",ln,col,snake[ln][col]);
58             start--;
59             ln++;
60         }
61         ln--;
62
63         generateSnake(snake,endRow+1,endCell+1,row-1,cell-1,start);
64
65     }else {
66         snake[(N-1)/2][(N-1)/2]=1;
67         int k = 0;
68         int m;
69         while(k < N) {
70             m=0;
71             for(;m < N;m++) {
72                 printf("%2d ",snake[k][m]);
73             }
74             if(m==N)
75                 printf("\n");
76             k++;
77         }
78         k = 0;
79         m = N-1;
80         int temp = 0;
81         while(k < N) {
82             temp = temp + snake[k][k]+snake[m][k];
83             m--;
84             k++;
85         }
86         printf("%2d ",temp-1);
87     }
88 }

输入:

7

输出:

由里向外的螺旋矩阵

时间: 2024-09-30 06:21:11

由里向外的螺旋矩阵的相关文章

蛇形矩阵与螺旋矩阵

自己写的蛇形矩阵:(蛇形矩阵就是在NXN矩阵格子上从左上到右下以"之"字型增加或减少,像蛇盘绕着的形状.本程序从左上开始盘旋一直到右下达到最大值) #include <iostream> using namespace std; #define n 10//输入要更改的矩阵大小 void main() { int a[n][n]={0},k=1,j=0,i=0,s1[4]={0,1,2,3},t1[4]={1,1,2,2},m=0; for (int t=1;t<=n

HLG 1564 螺旋矩阵 (趣味C语言)

链接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1564 Description 对于给定的一个数n,要你打印n*n的螺旋矩阵. 比如n=3时,输出: 1 2 3 8 9 4 7 6 5 Input 多组测试数据,每个测试数据包含一个整数n(1<=n<=32) Output 对于每组测试数据,输出一个n*n的螺旋矩阵,定义在题目描述里. 在一组测试数据中,每个数占的字符宽度

C版——打印螺旋矩阵

1.递归解法 递归解法如下: +--------------------------> X 轴 | 1   2   3   4 |  12 13 14 5 |  11 16 15 6 |  10 9   8   7 | Y轴 设元素1的坐标为(0,0),元素13的坐标为(1,1),--,任一元素的坐标为(x,y) 1 #include <stdio.h> 2 3 void SetMatrix(int **matrix, int x, int y, int start, int n) {

【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】

[059-Spiral Matrix II(螺旋矩阵II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8,

剑指offer (20) 打印螺旋矩阵

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> result; int nRows = matrix.size(); if (nRows == 0) return result; int nCols = matrix.at(0).size()

LeetCode 59. Spiral Matrix II (螺旋矩阵之二)

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 题目标签:Array 这道题目和之前的螺旋矩阵几乎没有区别,而且更简单.同样按照螺旋矩阵的特性

Java实现螺旋矩阵

螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环.如下图, 故,实现螺旋矩阵的思路也就跟上图所示,依次从外层向里层循环,当n为偶数时,循环n/2次:n为奇数时,循环n/2+1次.具体实现看以下代码: import java.util.Scanner; public class Snake { public void snake(int n) { int[][] data = new int[n][n]; int intA; int val

[NOIP2014普及组]螺旋矩阵

题目地址: ayyzvijos:http://pingce.ayyz.cn/vijos/Problem_Show.asp?id=2017 vijos:https://vijos.org/p/1913 COGS:http://218.28.19.228/cogs/problem/problem.php?pid=1811 题目来源:NOIP2014普及组第三题 问题分析:这道题的内容很易懂,而且容易实现,即直接构造出一个螺旋矩阵,输出对应位置即可.这样的方法大概可以过掉50%的数据.但是,对于100

p2239 螺旋矩阵

顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述--->p2239 螺旋矩阵 看到题,很明显,如果直接模拟的话,复杂度为\(O(n^2)\)过不去.(这个复杂度应该不正确,我不会分析的啊 qwq. 因此我们需要一个比较厉害的方法解决这个题, 前置知识 我们手写一些矩阵,发现我们填的数是会分层的 !. (同种颜色为一层.) 分层这个东西的话,我也不能具体解释,你可以认为是一圈一圈地填数. xjb分析 打表!找规律 我们可以手写一个程序,(也可以手写,手写的话会更简单一些.) 模拟一下