螺旋打印矩阵

题目: 对于一个N*M矩阵,请顺时针螺旋打印输出;

如 3 * 4 矩阵,

1   2   3  4

10 11 12 5

9    8   7  6

输出: 1 2 3 4 5 6 7 8 9 10 11 12

  1 #include <stdio.h>
  2 // nomally print matric
  3 void print_matric(const int *m, int r, int c) {
  4     int i, j;
  5     printf("%d * %d matric:\n", r, c);
  6     for(i = 0; i < r; i++) {
  7             for(j = 0; j < c; j++) {
  8                     printf("%d\t", *(m + i * c + j));
  9             }
 10             printf("\n");
 11     }
 12     return;
 13 }
 14 void clockwise_spiral_print_matric(const int *m, int r, int c) {
 15     int x0 = 0, x1 = c;
 16     int y0 = 0, y1 = r;
 17     int i;
 18     if(m == NULL || r <= 0 || c <= 0) {
 19         printf("empty matric\n");
 20         return;
 21     }
 22
 23     print_matric(m, r, c);
 24     printf("clockwise spiral print matrix\n");
 25
 26     while(x0 < x1 && y0 < y1) {
 27         // print top line
 28         for(i = x0; i < x1; i++) {
 29                 printf("%d ", *(m + x0 * c + i));
 30         }
 31         y0++;
 32
 33         // print right col
 34         for(i = y0; i < y1 && x0 < x1 && y0 < y1; i++) {
 35                 printf("%d ", *(m + i * c + x1 - 1));
 36         }
 37         x1--;
 38
 39         // print bottom line
 40         for(i = x1 - 1; i >= x0 && x0 < x1 && y0 < y1; i--) {
 41                 printf("%d ", *(m + (y1 - 1) * c + i));
 42         }
 43         y1--;
 44
 45         // print left col
 46         for(i = y1 - 1; i >= y0 && x0 < x1 && y0 < y1; i--) {
 47                 printf("%d ", *(m + i * c + x0));
 48         }
 49         x0++;
 50     }
 51     printf("\n\n");
 52     return;
 53 }
 54 // for test
 55 int main() {
 56     int r1 = 1;
 57     int c1 = 1;
 58     int m1[1][1] = {{1}};
 59
 60     int r2 = 1;
 61     int c2 = 3;
 62     int m2[1][3] = {{1,2,3}};
 63
 64     int r3 = 4;
 65     int c3 = 1;
 66     int m3[4][1] = {{1}, {2}, {3}, {4}};
 67
 68     int r4 = 2;
 69     int c4 = 2;
 70     int m4[2][2] = {{1,2}, {4,3}};
 71
 72     int r5 = 3;
 73     int c5 = 3;
 74     int m5[3][3] = {{1,2,3}, {8,9,4}, {7,6,5}};
 75
 76     int r6 = 4;
 77     int c6 = 4;
 78     int m6[4][4] = {{1,2,3,4}, {12,13,14,5}, {11,16,15,6}, {10,9,8,7}};
 79
 80     int r7 = 3;
 81     int c7 = 4;
 82     int m7[3][4] = {{1,2,3,4}, {10,11,12,5}, {9,8,7,6}};
 83
 84     int r8 = 4;
 85     int c8 = 3;
 86     int m8[4][3] = {{1,2,3}, {10,11,4}, {9,12,5}, {8,7,6}};
 87
 88     int r9 = 4;
 89     int c9 = 5;
 90     int m9[4][5] = {{1,2,3,4,5}, {14,15,16,17,6}, {13,20,19,18,7}, {12,11,10,9,8}};
 91
 92     int r10 = 5;
 93     int c10 = 4;
 94     int m10[5][4] = {{1,2,3,4}, {14,15,16,5}, {13,20,17,6}, {12,19,18,7}, {11,10,9,8}};
 95
 96     clockwise_spiral_print_matric((const int *)m1, r1, c1);
 97     clockwise_spiral_print_matric((const int *)m2, r2, c2);
 98     clockwise_spiral_print_matric((const int *)m3, r3, c3);
 99     clockwise_spiral_print_matric((const int *)m4, r4, c4);
100     clockwise_spiral_print_matric((const int *)m5, r5, c5);
101     clockwise_spiral_print_matric((const int *)m6, r6, c6);
102     clockwise_spiral_print_matric((const int *)m7, r7, c7);
103     clockwise_spiral_print_matric((const int *)m8, r8, c8);
104     clockwise_spiral_print_matric((const int *)m9, r9, c9);
105     clockwise_spiral_print_matric((const int *)m10, r10, c10);
106
107     return 0;
108 }
109         
时间: 2024-09-30 19:28:19

螺旋打印矩阵的相关文章

简单螺旋打印矩阵 - 直接, 好理解

打印螺旋矩阵的一种简单办法 , C 语言实现 #include <stdio.h> #define N 30 static int val = 10; int arr[N][N]; void print_row(int row_cur, int col_start, int col_end, int left_to_right){ int col_cur = col_start; if( col_start < 0 || col_end < 0) return; if( left_

写个简单的螺旋打印矩阵程序-C

#include<stdio.h> #define PRINT(x) printf("%03d ",(x)) void spiral_matrix_print(const int matrix[][4],int rows,int columns) { int top,left,i; int bottom = rows-1; int right = columns-1; top = left = i =0; while(bottom>=top && ri

如何打印矩阵

如何打印矩阵 顺时针方向打印矩阵 如何顺时针打印一个矩阵的元素呢,例如:如果输入如下矩阵: 1              2              3              45              6              7              89              10           11           1213           14           15           16 则依次打印出数字:1, 2, 3, 4, 8, 12,

顺时针打印矩阵

P128顺时针打印矩阵 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字.例如:如果输入如下矩阵: 1  2  3  4 5  6  7  8 9  10 11 12 13 14 15 16 则依次打印出数字:1.2.3.4.8.12.16.15.14.13.9.5.6.7.11.10 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>   #include<stdlib.h>   void printMatri

LeetCode:Spiral Matrix - 螺旋输出矩阵中的元素

1.题目名称 Spiral Matrix(螺旋输出矩阵中的元素) 2.题目地址 https://leetcode.com/problems/spiral-matrix/ 3.题目内容 英文:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 中文:给出一个m行n列的矩阵,以螺旋顺序返回矩阵中的所有元素. 例如:现有矩阵如下: [  [ 1,

顺时针和逆时针螺旋打印二维数组(行列式)

一.要求: 行列式,行和宽不一定相等,要求顺时针螺旋打印每一个元素,所谓顺时针螺旋即: 第一圈:从第一行第一列元素开始,先从左到右打印第一行所有元素,接着打印最后一剩余列元素,再从右到左打印最后一行剩余元素,接着从下到上打印第一列剩余元素 第二圈:从第二行第二列开始,按上面的顺时针顺序打印一圈元素 ...,一圈圈反复,直到把所有元素无重复的打印完. 逆时针螺旋与上面的顺序刚好相反. 二.分析: 顺时针螺旋打印可以将问题分割为:先按顺时针打印第一圈,再按顺时针打印第二圈,其中每圈又分四个步骤:从左

螺旋的矩阵

螺旋的矩阵 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 23(16 users) Total Accepted: 14(14 users) Rating: Special Judge: No Description 给出一个奇数 n,我们可以把数字 1 到 n*n 放到一个螺旋的矩阵中. 下图给出了从1到25的放法: 1    2   3   4   5 --------------------- 1| 21  22  23  

顺时针打印矩阵-剑指Offer

顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 思路 整体是按着一圈一圈打印,需要找到循环继续的条件:columns > startX * 2并且rows > startY * 2 注意打印每圈的时候,四个边的打印循环起始条件 代码 import java.

剑指OFFER之顺时针打印矩阵(九度OJ1391)

题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列. 接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1&l