首页 > 编程知识 正文

螺旋矩阵c语言思路,螺旋矩阵c语言顺逆时针

时间:2023-05-05 20:59:13 阅读:190812 作者:4686

螺旋矩阵 : 
    将 1~n^2 的自然数顺时针(或逆时针)填入一个n阶方阵。当 n=5 时,填充效果如下:
         ij                    1        2        3        4        5
           
              16      17      18      19       6
            
              15      24      25      20       7
            
              14      23      22      21       8
            
              13      12      11      10       9
              
   ★ 思路:         1.总结填充 n阶方阵时规律:· 
            1.上行: i(纵坐标)不变,  j(横坐标)改变:0 ~ N-1;
            2.右行: i(纵坐标)改变:0 ~ N-1     j(横坐标)不变;
            3.下行: i(纵坐标)不变    j(横坐标)改变: N-1 ~ loop;
            4.左行: i(纵坐标)改变: N-1 ~ loop    j(横坐标)不变;         2.将规律套用到每次遍历的每一圈,相当于缩小最外圈的规模,将每一次遍历都看作是最外层的填充:

                                               

          3.如果是逆时针填充,按照相同思路进行。    ★ 代码实现★ #include <stdio.h>#define N 5void Print(int a[][5]){int i,j;for(i=0 ; i<N ; ++i){for(j=0 ; j<N ;++j){printf("%4d",a[i][j]);}printf("nn");}}int main(void){int matrix[N][N];int i,j,loop,count=0;//单独记录 N 的值,使到非最外圈的时候能按//比例缩小规模 int n=N;for(loop=0 ; loop<N/2 ; ++loop){i=loop;j=i;for(j; j<n-1 ; ++j) //上行 matrix[i][j] = ++count;for(i; i<n-1; ++i) //右行 matrix[i][j] = ++count;for(j; j>loop ; --j) //下行matrix[i][j] = ++count;for(i; i>loop ; --i) //左行matrix[i][j] = ++count;n--; //缩小规模时,使规律同步 }//若 N 为奇数时,以上操作无法填充完最中间//的那个空,则需要单独填充if(N%2) matrix[N/2][N/2] = N*N;Print(matrix);return 0; }

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。