在 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 <iostream>
#define N 105
using namespace std;
int main()
{
int n;
cin>>n;
int x=0,y=n-1,num=1;
int a[N][N] = {0};
a[x][y] = num++;
while(num <= n*n){
while(x+1 < n && !a[x+1][y])
a[++x][y] = num++;
while(y-1 >= 0 && !a[x][y-1])
a[x][--y] = num++;
while(x-1 >= 0 && !a[x-1][y])
a[--x][y] = num++;
while(y+1 < n && !a[x][y+1])
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;
}
return 0;
}
|