MxN阶螺旋矩阵

本文介绍了一种使用一维数组实现螺旋矩阵的简洁算法。通过改变方向来填充数组,避免了复杂的二维数组操作,仅用几十行代码实现了高效、清晰的解决方案。

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

闲的无聊翻到老早的草稿纸上有乱画的螺旋矩阵的算法,虽然已过了纠结算法的时候,写出来打发时间吧,短短五十行代码,么想到也耗了一下午时间。算法部分不过一个switch,有效语句不过十几行。变量名注释都很清楚,有需要的可以瞧瞧。也瞧过网上其他人的,太复杂。

思路:开始也按网上的二维数组思路,越搞越复杂,理不清头绪。吃了两袋口水娃,豁然开朗,这不就是一条盘起来的shit吗?明明是一维数组,这样一来就简单了。只要将这条shit每盘一节转个方向就好了,所以一个循环就搞定了。

//////////////////////////////////////////////////////////////////////////
//螺旋矩阵
//////////////////////////////////////////////////////////////////////////
#include 
#include 
int main(int argc, char argv[])
{
	const int _Max_M = 15;//行
	const int _Max_N = 10;//列
	int array[_Max_M][_Max_N] = {0}, begin = 1, i = 0, j = 0, left = 0, top =0, right = _Max_N-1, bottom = _Max_M-1;
	int direction = 0;//0右,1下,2左,3上
	for (int data = begin; data <= begin+_Max_N*_Max_M-1; ++data)
	{
		array[i][j] = data;
		printf("[%d][%d]=%d\t", i, j,array[i][j]);//过程打印
		if(!(data%5))std::cout<<"\n";
		switch (direction)
		{
		case 0:
			++j;
			if(j == right){
				direction = ++direction%4;
				--right;
			}
			break;
		case 1:
			++i;
			if(i == bottom){
				direction = ++direction%4;
				--bottom;
			}
			break;
		case 2:
			--j;
			if(j == left){
				direction = ++direction%4;
				++left;
			}
			break;
		case 3:
			--i;
			if(i-1 == top){
				direction = ++direction%4;
				++top;
				std::cout<<"\n\n";
			}
			break;
		}
	}
	std::cout<<"\n=============================================\n"<

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值