LoopMatrix

#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");
    }
}

 

posted on 2015-04-21 16:11  Karma_wjc  阅读(315)  评论(0编辑  收藏  举报