C++輸入正整數,輸出1-n*n順時針排列矩陣之動態分配

#include <iostream>
#include <cstring>
/*輸入正整數n, 輸出將1~n*n順時針排列矩陣*/
using namespace std;
void DisplayMatrix(int *A, int n);
int main()
{
    int     *A ;
    int     n;
    cin >> n;
    A = new int [n*n];
    memset (A, 0, n*n*sizeof (int));

    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*n+col] = k;
        switch (dir) {
        case DOWN :
            if (row < n-1 && A [(row+1)*n+col] == 0) {
                ++row;
            } else {
                --col; dir = LEFT;
            }
            break;
        case LEFT :
            if (col > 0 && A [row*n+col-1] == 0) {
                --col;
            } else {
                --row; dir = UP;
            }
            break;
        case UP :
            if (row > 0 && A [(row-1)*n+col] == 0) {
                --row;
            } else {
                ++col; dir = RIGHT;
            }
            break;
        case RIGHT :
            if (col < n-1 && A [row*n+col+1] == 0) {
                ++col;
            } else {
                ++row; dir = DOWN;
            }
            break;
        }
    }
    DisplayMatrix (A, n);
    delete [] A;
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章