C++输入正整数n, 输出将1~n*n顺时针排列矩阵之数组

#include <iostream>
using namespace std;
void    DisplayMatrix (int A [100][100], int n);


int main()
{
    int     A [100][100] = {0};
    int     n;
    cin >> n;
    enum DIRECTION {DOWN = 0, LEFT, UP, RIGHT} dir = DOWN;//枚举
    int row, col, k;
    row = 0; col = n - 1;
    for ( k = 1; k <= n*n; k++) {
        A [row][col] = k;
        switch (dir) {
        case DOWN :
            if (row < n-1 && A [row+1][col] == 0) {
                ++row;
            } else {
                --col; dir = LEFT;
            }
            break;
        case LEFT :
            if (col > 0 && A [row][col-1] == 0) {
                --col;
            } else {
                --row; dir = UP;
            }
            break;
        case UP :
            if (row > 0 && A [row-1][col] == 0) {
                --row;
            } else {
                ++col; dir = RIGHT;
            }
            break;
        case RIGHT :
            if (col < n-1 && A [row][col+1] == 0) {
                ++col;
            } else {
                ++row; dir = DOWN;
            }
            break;
        }
    }
    DisplayMatrix (A, n);
}


void    DisplayMatrix (int A [100][100], int n)
{
    for (int row =0; row < n; ++row) {
        for (int col = 0; col < n; ++col) {
            cout.width (4);
            cout << A [row][col];
        }
        cout << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/Almost_123/article/details/78127217