可以实现n*m矩阵的Z字形打印
bool flag1=false; void Zprint(int** arr,int ar,int ac,int br,int bc,bool flag); void printMatrix(int** arr, int n, int m) { if(arr == NULL) return; int ar=0; int ac=0; int br=0; int bc=0; bool flag=false; while(ar<n) { Zprint(arr,ar,ac,br,bc,flag); ar = ac == m-1 ? ar+1 : ar; ac = ac == m-1 ? ac : ac+1; bc = br == n-1 ? bc+1 : bc; br = br == n-1 ? br : br+1; flag=!flag; } printf("\n"); } void Zprint(int** arr,int ar,int ac,int br,int bc,bool flag) { int len=br-ar; if(flag==false) { for(int i = 0 ; i <= len ; i++) { if(flag1==false) { printf("%d",arr[br][bc]); br--; bc++; flag1=true; } else { printf(" %d",arr[br][bc]); br--; bc++; } } } else { for(int i = 0 ; i <= len ; i++) { if(flag1==false) { printf("%d", arr[ar][ac]); ar++; ac--; flag1=true; } else { printf(" %d",arr[ar][ac]); ar++; ac--; } } } } int main() { int n; int x; cin>>n; int **arr=(int**)malloc(sizeof(int*)*n); for(int i=0;i<n;i++) { arr[i]=(int *)malloc(sizeof(int)*n); for(int j=0;j<n;j++) { cin>>x; arr[i][j]=x; } } printMatrix(arr,n,n); return 0; }