// 螺旋矩阵 http://baike.baidu.com/view/9949924.htm
void PrintHelixMatrix(int N)
{
    // 螺旋矩阵中增长的数字,填满后正好等于N*N
    int num=0;

    // 定义N*N矩阵并填充
    int *matrixData=new int[N*N];

    // 四个边界
    int left=0,top=0,right=N-1,bottom=N-1;

    // 当前行和列
    int row=0,col=0;

    // 由外至内,填充矩阵
    while(num != N*N)
    {
        // →
        for (col=left;col<=right;col++)
        {
            matrixData[row*N+col]=++num;
        }
        col--;

        // ↓
        for (row=top+1;row<=bottom;row++)
        {
            matrixData[row*N+col]=++num;
        }
        row--;

        // ←
        for (col=right-1;col>=left;col--)
        {
            matrixData[row*N+col]=++num;
        }
        col++;

        // ↑
        for (row=bottom-1;row>top;row--)
        {
            matrixData[row*N+col]=++num;
        }
        row++;

        // 边界向内移动
        top++;
        left++;
        right--;
        bottom--;
    }

    // 输出此矩阵
    for (int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            // 3位右对齐
            printf("%3d ",matrixData[i*N+j]);
        }
        printf("\n");
    }

    delete[] matrixData;
    printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
    PrintHelixMatrix(1);
    PrintHelixMatrix(5);
    PrintHelixMatrix(7);
    return 0;
}

 


本文链接地址: 面试题练习:输出螺旋矩阵
http://qingfengju.com/index.asp?id=342

分类:Win32/C++ 查看次数:3008 发布时间:2013-8-1 10:27:34