#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("\r\n");
}
}