首页 > 其他 > 详细

LoopMatrix

时间:2015-04-21 17:56:40      阅读:95      评论:0      收藏:0      [点我收藏+]
#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");
    }
}

 

LoopMatrix

原文:http://www.cnblogs.com/Karma-wjc/p/4444651.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!