算法题目---顺时针打印矩阵

来源:互联网 发布:16年双十一淘宝交易额 编辑:程序博客网 时间:2024/06/06 05:05

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。

oid printNumber(int num)
{
    printf("%d\t",num);
}

void PrintMatrixInCircle(int **numbers,int cols,int rows,int start)
{
    int endX = cols - 1 - start;
    int endY = rows - 1 - start;

    for(int i = start;i<= endX;++i)
    {
        int num = numbers[start][i];
        printNumber(num);
    }
    
    if(start < endY)
    {
        for(int i = start+1;i <= endY;++i )
        {
            int num = numbers[i][endX];
            printNumber(num);
        }
    }
    
    if(start < endY && start < endY)
    {
        for(int i=endX-1;i>= start; --i)
        {
            int num = numbers[endY][i];
            printNumber(num);
        }
    }
    
    if(start < endX && start < endY -1)
    {
            for(int i = endY -1;i >= start+1;--i)
            {
                int num = numbers[i][start];
                printNumber(num);
            }
    }    
}

void PrintMatrixClockwise(int **number,int cols,int rows)
{
    if(number == NULL || cols <= 0 || rows <= 0)
        return;
    
    int start = 0;
    while(cols > start*2 && rows > start*2)
    {
         PrintMatrixInCircle(number,cols,rows,start);
         start++;    
    }
}

void Test(int cols,int rows)
{
     printf("Test Begin: %d cols, %d rows.\n", cols, rows);
        
     if(cols < 1 || rows < 1)
        return ;
     int **numbers = new int*[rows];
     for(int i=0;i<rows;++i)
     {
            numbers[i] = new int [cols];
            for(int j=0;j<cols;++j)
            {
                numbers[i][j] = i*cols + j +1;
            }            
     }
     PrintMatrixClockwise(numbers,cols,rows);
     printf("\n");
        
    for(int i=0;i<rows;++i)
        delete[] (int*)numbers[i];
    
    delete[] numbers;

        
}

int main()
{
    Test(1,1);
    Test(2,2);
    Test(4,4);
    Test(5,5);
    Test(1,5);
    Test(2,5);
    Test(3,5);
    Test(4,5);
    Test(5,1);
    Test(5,2);
    Test(5,3);
    Test(5,4);

    return 0;
}