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

结果
