#include <stdio.h> #include <stdlib.h> #define ALPHA_NUM 26 const char AlphaTable[ALPHA_NUM]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y','Z'}; void PrintMatrix(const int** pMatrix,int m,int n); void GetLoopMatrix(int** pMatrix,int m,int n); void ResetMatrix(int** pMatrix,int m,int n); int main() { int i; int m,n; //回环矩阵阶数 int **pMatrix=NULL; //回环矩阵指针数组 scanf("%d%d",&m,&n); pMatrix=(int*)malloc(sizeof(int*)*m); //一维数组指针 for(i=0;i<m;i++) *(pMatrix+i)=(int*)malloc(sizeof(int)*n); ResetMatrix(pMatrix,m,n); GetLoopMatrix(pMatrix,m,n); PrintMatrix(pMatrix,m,n); return 0; } void ResetMatrix(int** pMatrix,int m,int n) { int i,j; for(i=0;i<m;i++) for(j=0;j<n;j++) *(*(pMatrix+i)+j)=0; } void GetLoopMatrix(int** pMatrix,int m,int n) { int i,x,y,xDir,yDir,cnt; x=y=0; xDir=1; yDir=0; cnt=m*n; for(i=0;i<cnt;i++) { *(*(pMatrix+y)+x)=AlphaTable[i%ALPHA_NUM]; if(x+xDir<0||y+yDir<0||x+xDir==n||y+yDir==m||(*(*(pMatrix+y+yDir)+x+xDir))!=0) //边界处理情况 { if(xDir) { yDir=xDir; xDir=0; } else { xDir=-yDir; yDir=0; } } x=x+xDir; y=y+yDir; } } void PrintMatrix(const int** pMatrix,int m,int n) { int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%c",*(*(pMatrix+i)+j)); } printf(" "); } }