矩阵"/>
MxN阶螺旋矩阵
闲的无聊翻到老早的草稿纸上有乱画的螺旋矩阵的算法,虽然已过了纠结算法的时候,写出来打发时间吧,短短五十行代码,么想到也耗了一下午时间。算法部分不过一个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"<
结果
更多推荐
MxN阶螺旋矩阵
发布评论