第四十四题 顺时针打印矩阵

本文详细介绍了如何使用C++实现矩阵螺旋打印算法,通过遍历矩阵的边界并按顺时针方向打印数字,最终实现矩阵内所有元素的螺旋打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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 <iostream>
using namespace std;
void PrintMatrixInCircle(int** numbers, int columns, int rows, int begin);
void printMatrix(int **m_Matrix,int row,int col)
{
	if (m_Matrix==nullptr||row<=0||col<=0)
	{
		return;
	}
	int begin=0;
	while (col>begin*2&&row>begin*2)
	{
		PrintMatrixInCircle(m_Matrix, col, row, begin);
		++begin;
	}
}
void PrintMatrixInCircle(int** numbers, int columns, int rows, int begin)
{
	int endX = columns - 1 - begin;
	int endY = rows - 1 - begin;
	// 从左到右打印一行
	for(int i = begin; i <= endX; ++i)
	{
		int number = numbers[begin][i];
		cout<<number<<endl;
	}
	// 从上到下打印一列
	if(begin < endY)
	{
		for(int i = begin + 1; i <= endY; ++i)
		{
			int number = numbers[i][endX];
			cout<<number<<endl;
		}
	}
	// 从右到左打印一行
	if(begin < endX && begin < endY)
	{
		for(int i = endX - 1; i >= begin; --i)
		{
			int number = numbers[endY][i];
			cout<<number<<endl;
		}
	}

	// 从下到上打印一行
	if(begin < endX && begin < endY - 1)
	{
		for(int i = endY - 1; i >= begin + 1; --i)
		{
			int number = numbers[i][begin];
			cout<<number<<endl;
		}
	}
}
int main()
{
	int rows=5;
	int columns=5;
	int** numbers = new int*[rows];
	for(int i = 0; i < rows; ++i)
	{
		numbers[i] = new int[columns];
		for(int j = 0; j < columns; ++j)
		{
			numbers[i][j] = i * columns + j + 1;
		}
	}
    printMatrix(numbers, columns, rows);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值