题目描述
输出蛇形矩阵,这个矩阵从左上角开始,按照蛇形的轨迹,将1~n×m个数字,填写进去矩阵:
例如:一个3×4的格纸上:
1 3 4 9
2 5 8 10
6 7 11 12
输入格式
两个整数:n和m,分别表示这张纸的格子行列数。
输出格式
一个n×m大小的矩形,按要求填数,每个数场宽为4。
样例数据
输入样例 #1 | 输出样例 #1 |
---|---|
3 4 | 1 3 4 9 2 5 8 10 6 7 11 12 |
样例分析
如上所述。
数据范围
100%的数据:1 <= n , m <=100
解题:
#include<bits/stdc++.h>
using namespace std;
int n,m,x=1,y=1,st=1,t,a[110][110],dx[4]={1,-1,0,1},dy[4]={0,1,1,-1};
int main(){
cin>>n>>m;
memset(a,-1,sizeof(a));
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=0;
a[1][1]=1;
while(st<n*m){
while(a[x+dx[t]][y+dy[t]]!=0)t=(t+1)%4;
x+=dx[t];
y+=dy[t];
a[x][y]=++st;
if(t==0||t==2)t=(t+1)%4;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cout<<setw(4)<<a[i][j];
cout<<endl;
}
return 0;
}