C/C++ 蛇形矩阵/蛇形填数

在 n * n 方阵里填入 1, 2, …, n * n, 要求填成蛇形。例如 n = 4 时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

这是从右上角开始的蛇形矩阵,如果从左上角开始变换一下位置即可。初始化第一个值,在填数据的时候判断下一个位置是否为0。

#include 
#define N 105

using namespace std;

int main()
{
    int n;
    while(cin>>n){
        int x=0,y=n-1,num=1;//x,y记录移动的指针
        int a[N][N] = {0};
        a[x][y] = num++;
        while(num <= n*n){
            while(x+1 < n && !a[x+1][y])//down
                a[++x][y] = num++;
            while(y-1 >= 0 && !a[x][y-1])//left
                a[x][--y] = num++;
            while(x-1 >= 0 && !a[x-1][y])//up
                a[--x][y] = num++;
            while(y+1 < n && !a[x][y+1])//right
                a[x][++y] = num++;
        }
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n-1; j++){
                cout<<a[i][j]<<" ";
            }
            cout<<a[i][n-1]<<endl;
        }
        cout<<endl;
    }
    return 0;
}

你可能感兴趣的:(笔记,c++,线性代数,矩阵)