2898: 【例63.1】 蛇形填数

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:4 解决:3

题目描述

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

其中,$n\le 20$。

输入

输入$n$。

输出

输出题述方阵。$n$行,每行各数之间用一个空格隔开。

样例输入 复制

4

样例输出 复制

10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

提示

#include<bits/stdc++.h>
using namespace std;
int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}};//方向数组
int a[25][25];
int main(){
    int k=1,n,fx,fy,d = 0,x,y;//fx,fy 当前焦点位置 x, y 下一个位置 d:方向
    cin>>n;
    fx=1,fy=n;
    while(k<=n*n){
        a[fx][fy]=k++;//赋值
        x=fx+dir[d][0],y=fy+dir[d][1]; //下一个位置
        if(a[x][y] != 0 || x>n|| x<1 || y>n || y<1) //如果新位置上已经有值了或移出了二维数组范围
            d=(d + 1) % 4; //变换方向
        fx += dir[d][0],fy += dir[d][1]; //更新焦点位置
    }
    for(int i=1;i<=n;++i){
        for(int j=1;j<=n;++j) cout<<a[i][j]<<' ';
        cout << endl;
    }
    return 0;
}