题目描述:
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式:
输入共一行,包含两个整数n和m。
输出格式:
输出满足要求的矩阵。
矩阵占n行,每行包含m个空格隔开的整数。
数据范围:
1≤n,m≤100
样例:
输入样例
3 3
输出样例
1 2 3
8 9 4
7 6 5
C++代码:
#include <iostream>
#include <iomanip>
using namespace std;
#define N 110
int main()
{
int n,m;
cin>>n>>m;
int q[N][N] = {0}; //将数组每个元素初始化为0
int x=0,y=0,d=0;
int direction_x[4] = {0, 1, 0, -1}, direction_y[4] = {1, 0, -1, 0}; //控制矩阵元素移动方向的一对数组,右:(0,1),下:(1,0),左:(0,-1),上:(-1,0)
for(int i=1; i<=n*m; i++)
{
int a,b; //a,b用于试错
q[x][y] = i;
a = x + direction_x[d];
b = y + direction_y[d];
if(a<0 || a>=n || b<0 || b>=m || q[a][b])
{
d = (d + 1) % 4;
a = x + direction_x[d];
b = y + direction_y[d];
}
x = a;
y = b;
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cout<<q[i][j]<<" ";
}
cout<<endl;
}
return 0;
}