输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式:
输入共一行,包含两个整数n和m。1≤n,m≤100
输出格式:
输出满足要求的矩阵。
矩阵占n行,每行包含m个整数,每个整数占5个字节。
输入样例:
3 4
输出样例:
8 9 10 1
7 12 11 2
6 5 4 3
代码示例如下:
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
int main()
{
int n,m;
int a[N][N];
int cnt=1;
int total;
int dx[4]={0,1,0,-1};//右下左上
int dy[4]={1,0,-1,0};//右下左上
int st[N][N]={0};
cin>>n>>m;
total=n*m;//总共是n*m个数
//cout<<total<<endl;
//dfs(0,0,0);//一开始在坐标(0,0),要向右走
//cout<<endl<<endl<<endl;
int i=0,j=m-1,t=1;//一开始是在(0,m-1),向下走
while(cnt<=total)
{
if(i<0 || i>=n || j<0 || j>=m || st[i][j]==1)
{
i-=dx[t];
j-=dy[t];
t+=1;
if(t>3) t=0;
i+=dx[t];
j+=dy[t];
}
//if(i>=0 && i<n && j>=0 && j<m)
else
{
a[i][j]=cnt++;
st[i][j]=1;
//cout<<t<<' '<<':'<<' ';
//cout<<i<<' '<<j<<' ';
//cout<<a[i][j]<<endl;
i=i+dx[t];
j=j+dy[t];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
//cout<<" "<<a[i][j];
printf("%5d",a[i][j]);
}
//cout<<endl;
if(i<n-1) printf("\n");
}
//cout<<cnt<<endl;
return 0;
}