题目描述
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入样例
3 3
输出样例
1 2 3
8 9 4
7 6 5
C++ 代码
//2020/9/19
//y总思路非常巧妙
//注释上我自己的理解,作个纪念
#include <iostream>
#include <cstdio>
int res [999][999];
//开一个数组 ,由于是全局变量,所以初始值为0
//便于后续判定
using namespace std;
int main (){
int n,m;
cin >> n >> m ;
int fx[4]={0,1,0,-1};
int fy[4]={1,0,-1,0};
//我们的数一共就四个方向可以动,
//顺序为右下左上循环
//fx,fy就是存放对应的位移距离
int i,j,k,x,y;
int f;
int a,b;
for (i = 1,x = 0,y = 0,f = 0;i <= n*m ;i++){
//xy是坐标
res[x][y]=i;
a=x+fx[f];
b=y+fy[f];
//ab是变换后的坐标
if (a > n-1||a < 0||
b > m-1||b < 0||
res[a][b]){
//这个判定很关键,
//如果变换后的坐标出了n矩阵的范围
//又或者是变换后的位置已经走过了
//那么就要换到下一个方向了
f=(f+1)%4;
//f相当于方向盘
a=x+fx[f];
b=y+fy[f];
//变换方向后,ab回到正轨
}
x=a;
y=b;
}
for (i = 0;i < n;i++){
for (j = 0;j < m;j++){
cout << res[i][j] <<' ';
}
cout << endl;
}
return 0;
}