一个蛇形填充n×n矩阵的算法

该程序实现了一个蛇形填充n×n矩阵的算法。通过定义方向变量d(0表示右上,2表示左下),交替进行对角线填充:当向右上方超出边界时转向左下方,反之亦然。填充从a[0][0]=1开始,依次递增至n²。最后通过printArr函数输出填充完成的矩阵。核心逻辑是通过判断边界条件动态调整填充方向,实现蛇形走位填充二维数组。该算法时间复杂度为O(n²),空间复杂度为O(n²)。
#include <stdio.h>
#include <math.h>#define M  1001
int a[M][M];void fun(int n){int k=1,i=0,j=0;int d =0;  //0右上角    2左下角 a[0][0]=k;while(k<=n*n){k++;if(d==0){ //右上角  i--,j++ i--,j++;if(j==n){ //超出右边了, i+=2,j--;d=2; //改方向 }else if(i<0){i++;d=2; //改方向 }a[i][j]=k;			continue;}if(d==2){//左下角 i++,j--;if(i==n){i--,j+=2;d=0;}else if(j<0){j++;d=0;}a[i][j]=k;			continue;}}
}printArr(int n){int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%d ",a[i][j]);puts("");}
}int main() {    int n;scanf("%d",&n);fun(n);printArr(n);return 0;
}