剑指offer——面试题29:顺时针打印矩阵

本文详细解析了一种矩阵螺旋打印算法的实现过程,通过C++代码展示了如何按顺时针方向打印矩阵元素。该算法首先定义了四个边界,然后依次打印每一圈的四个边上的元素,最后递归地处理剩余的内部矩阵,直至所有元素被打印。
 1 #include"iostream"
 2 #include"stdio.h"
 3 using namespace std;
 4 
 5 void PrintMatrixInCircle(int** matrix,int rows,int columns,int start)
 6 {
 7     int endRow=rows-1-start;
 8     int endCol=columns-1-start;
 9 
10     for(int i=start;i<=endCol;i++)
11         cout<<matrix[start][i]<<' ';
12     cout<<endl;
13     if(endRow>start)
14     {
15         for(int i=start+1;i<=endRow;i++)
16             cout<<matrix[i][endCol]<<' ';
17         cout<<endl;
18     }
19 
20     if(endRow>start&&endCol>start)
21     {
22         for(int i=endCol-1;i>=start;i--)
23             cout<<matrix[endRow][i]<<' ';
24         cout<<endl;
25     }
26     if(endRow-1>start&&endCol>start)
27     {
28         for(int i=endRow-1;i>start;i--)
29             cout<<matrix[i][start]<<' ';
30         cout<<endl;
31     }
32 }
33 
34 void PrintMatrixClockWisely(int** matrix,int rows,int columns)
35 {
36     if(matrix==nullptr || rows<=0 || columns<=0)
37         return;
38     int start=0;
39     while(rows>2*start&&columns>2*start)
40     {
41         PrintMatrixInCircle(matrix,rows,columns,start);
42         start++;
43     }
44     cout<<endl<<endl;
45 }
46 
47 void Test(int rows,int cols)
48 {
49     int** matrix=new int*[rows];
50 
51     for(int i=0;i<rows;i++)
52     {
53         matrix[i]=new int[cols];
54         for(int j=0;j<cols;j++)
55         {
56             matrix[i][j]=i*cols+j;
57         }
58     }
59     PrintMatrixClockWisely(matrix,rows,cols);
60 }
61 
62  int main()
63  {
64     Test(1,1);
65     Test(1,2);
66     Test(2,1);
67     Test(5,5);
68 
69     return 0;
70  }
View Code

 

转载于:https://www.cnblogs.com/acm-jing/p/10429242.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值