5、螺旋矩阵

        螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。如:

1        2        3        4

10     11      12       5

9        8        7        6

循环不变量

          处理的时候要选择左闭右开:

5、螺旋矩阵_第1张图片

         如上图所示,可能不太好理解,可以看下面的矩阵:

1        2        3        4

10     11      12       5

      8        7        6

        即每次只处理头到尾部之间的数据,不包含尾部也就是左(头)闭右(尾)开。

伪代码:

startx = 0;//初始的x坐标
starty = 0;//初始的y坐标
offset = 1;
count = 1;
while(n/2)%n为螺旋矩阵边的长度
{
    for(j = starty; j < n-offset; j++)
    //遍历红边
    {
        nums[startx][j] = count++;
    }
    //循环结束后 j = n - offset;
    for(i = startx; i < n - offset; i++)
    //遍历绿边
    {
        nums[i][j] = count++;
    }
    for(;j > starty;j--)
    //遍历蓝边
    {
        nums[i][j] = count++;
    }    
    //遍历紫边
    for(;i > startx; i--)
    {
        num[i][j] = count++;
    }
    startx ++;
    starty ++;
    offset ++;
}
if(1 = n%2)
    nums[i][j] = count;

        牢记循环不变量原则,每一条边的处理规则要统一。

你可能感兴趣的:(c语言,c++算法刷题笔记,矩阵,算法)