博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题20:顺时针打印矩阵递归和非递归两种方式实现
阅读量:5735 次
发布时间:2019-06-18

本文共 1903 字,大约阅读时间需要 6 分钟。

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

例如:如果输入如下矩阵:

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

#include "stdafx.h"//方法一:递归方式;顺时针循环打印,一圈一圈的打印,先右,再下,再左,再上;打完一圈再打内圈,当不符合条件时,结束。 //参数:matrix:二维矩阵;columns:矩阵的列数;rows:矩阵的行数;start:一圈开始的左上角的坐标值(x、y坐标是相同的,例如5X5,第一圈左上角(start,start)即为(0,0)...) void PrintMatrixRecursive(int matrix[][4],int columns,int rows,int start=0){	if (!matrix||columns<1||rows<1)	{		return;	}	//递归终止条件	if (columns<=2*start||rows<=2*start)	{		return;	}	int stopx=columns-1-start;//一圈最右列在坐标中的位置	int stopy=rows-1-start;//一圈最大行在坐标中位置	//打印此圈中的最上行	for (int i=start;i<=stopx;i++)	{		printf("%d ",matrix[start][i]);	}	//打印此圈中的最右列	if (start
=start;i--) { printf("%d ",matrix[stopy][i]); } } //打印次圈中的最左行 if (start
=start+1;i--) { printf("%d ",matrix[i][start]); } } PrintMatrixRecursive(matrix,columns,rows,start+1);//递归调用打印下一圈}//非递归方式,其主要思想和递归相同,只是增加循环判断打印函数的退出条件void PrintMatrix(int matrix[][4],int columns,int rows,int start);//打印矩阵单圈的函数声明void PrintMatrixCircle(int matrix[][4],int columns,int rows){ if (!matrix||columns<1||rows<1) { return; } int start=0; while(columns>start*2&&rows>start*2) { PrintMatrix(matrix,columns,rows,start); ++start; } }//打印矩阵单圈的函数void PrintMatrix(int matrix[][4],int columns,int rows,int start){ int stopx=columns-1-start;//一圈最右列在坐标中的位置 int stopy=rows-1-start;//一圈最大行在坐标中位置 //打印此圈中的最上行 for (int i=start;i<=stopx;i++) { printf("%d ",matrix[start][i]); } //打印此圈中的最右列 if (start
=start;i--) { printf("%d ",matrix[stopy][i]); } } //打印次圈中的最左行 if (start
=start+1;i--) { printf("%d ",matrix[i][start]); } }}//简单测试,打印5x4矩阵int main(){ int matrix[][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}}; printf("递归方式实现: "); PrintMatrixRecursive(matrix,4,5); printf("\n非递归方式实现:"); PrintMatrixCircle(matrix,4,5); printf("\n"); return 0;}

转载地址:http://krrwx.baihongyu.com/

你可能感兴趣的文章
深圳联通特邀湖北籍企业参观公司总部大楼举行
查看>>
告警系统主脚本、告警系统配置文件、告警系统监控项目
查看>>
Python 和 PyCharm 在 windows10 环境的安装和设置
查看>>
C语言入门基础之数组——数学和编程的完美结合(图)
查看>>
《远见》的读后感作文1000字范文
查看>>
重置密码、单用户模式、救援模式
查看>>
LAMP环境搭建1-mysql5.5
查看>>
第三课 Linux目录及文件管理、用户组管理及bash重定向
查看>>
shell 脚本攻略--小试牛刀
查看>>
spring boot view override
查看>>
bzoj 2282: [Sdoi2011]消防
查看>>
我的友情链接
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>
vim编辑器如何添加或删除多行注释
查看>>
[LeetCode] Merge Intervals
查看>>
iOS开发-按钮的基本使用
查看>>
在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
查看>>
REST技术第三步 @BeanParam的使用
查看>>