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

打印螺旋矩阵的一种简单办法 , 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_to_right){
        while(col_cur < col_end){
            printf("%d ", arr[row_cur][col_cur]);
            //scanf("%d", &arr[row_cur][col_cur]);
            arr[row_cur][col_cur] = val++;
            ++col_cur;
        }
    }
    else{
        while(col_cur > col_end){
            printf("%d ", arr[row_cur][col_cur]);

            arr[row_cur][col_cur] = val++;
            --col_cur;
        }
    }
}
void print_col(int col_cur, int row_start, int row_end, int up_to_bottom){
    int row_cur = row_start;
    if(row_start < 0 || row_end < 0 ) return;
    if(up_to_bottom){
        while(row_cur < row_end){
            printf("%d ", arr[row_cur][col_cur]);
            //scanf("%d", &arr[row_cur][col_cur]);
            arr[row_cur][col_cur] = val++;
            ++row_cur;
        }
    }
    else{
        while(row_cur > row_end){
            printf("%d ", arr[row_cur][col_cur]);
            //scanf("%d", &arr[row_cur][col_cur]);
            arr[row_cur][col_cur] = val++;
            --row_cur;
        }
    }
}
void read_matrix(int row_start, int row_end, int col_start, int col_end){
    if(row_start > row_end|| col_start > col_end)
        return;
    if(row_start == row_end || col_start == col_end)
    {
        printf("%d ", arr[row_start][col_start]);
        //scanf("%d", &arr[row_start][col_start]);
        arr[row_start][col_start] = val++;
        return;
    }
    int i = row_start;
    int j = col_start;
    int i_end = row_end;
    int j_end = col_end;
        print_row(i,       j,        j_end,   1);
        print_col(N-j-1,   i,        i_end,     1);
        print_row(N-i-1,   j_end,    j,    0);
        print_col(j,       i_end,    i, 0);

    read_matrix(row_start+1,   row_end-1, col_start+1, col_end-1);
}
void printf_()
{
    int i, j ;
    i = 0, j = 0;
    while(i < N){
        while(j < N){
            printf("%d ", arr[i][j]);
            ++j;
        }
        printf("\n");
        ++i;
        j = 0;
    }
}

int main(void)
{
    memset(arr, N*N,0);
    read_matrix(0, N-1, 0, N-1);
    getchar();
    printf_();

}

运行结果 :

时间: 2024-07-30 12:15:02

简单螺旋打印矩阵 - 直接, 好理解的相关文章

写个简单的螺旋打印矩阵程序-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

螺旋打印矩阵

题目: 对于一个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&

剑指offer之【顺时针打印矩阵】

题目: 顺时针打印矩阵 链接: https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7

如何打印矩阵

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

逆时针打印矩阵

研究生的生活好无聊,最近想出去找找实习了.就复习一下数据结构,大一学的,也没复习过,面试的时候被鄙视了.    看到一个学姐发的,应该是金山的笔试题目: 给一个矩阵,将矩阵逆时针打印出来,如: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 逆时针打印出来当然是:1 2 3 4 5...14 15 16 乍一看,这题目很简单,就是两个循环就可以搞定.其实,没有想的那么简单,因为每次循环后,循环体都发生了变化.参考了网上的一些解题思路,现在说一下我的思路. 1.定义一

【Java】 剑指offer(29) 顺时针打印矩阵

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思路 每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归.每次打印矩阵的左上角的横纵坐标相同,即为start,而其余三个角的坐标都与行列数以及start有关,因此只需要for循环即可实现打印. 当然,其实只要针对start进行循环判断,start

算法初级面试题03——队列实现栈、栈实现队列、转圈打印矩阵、旋转矩阵、反转链表、之字打印矩阵、排序矩阵中找数

第一部分主要讨论:栈.队列.数组矩阵相关的面试题 题目一 用数组结构实现大小固定的队列和栈 public static class ArrayStack { private Integer[] arr; private Integer size; public ArrayStack(int initSize) { if (initSize < 0) { throw new IllegalArgumentException("The init size is less than 0"

顺时针打印矩阵

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,