#include<iostream>
using namespace std;
int main(){
int n,m,a[110][110],x=1,y=1,i=1;//数组a存蛇形矩阵中的数
cin>>n>>m;
int st[110][110]={0};//数组st对存入数组a的数进行标记
st[1][m+1]=1,st[n+1][m]=1,st[n][0]=1;//对开始的转折点进行标记
while(i){
//将1~n*m按照从左往右,从上往下,从右往左,从下往上即的顺序依次存入数组a
if(y<=m){
//从左往右存入
for(int j=y;;j++){
if(st[x][j]==1)break;//如果该数标记了就跳出循环
a[x][j]=i++;//i赋值给a[x][j]后自加1
st[x][j]=1;//标记数组a[x][j]存过数字
y=j;//更新坐标y
}
}
x++;
if(x<=n){
//从上往下存入
for(int j=x;;j++){
if(st[j][y]==1)break;
a[j][y]=i++;
st[j][y]=1;
x=j;
}
}
y--;
if(y>=1){
//从右往左存入
for(int j=y;;j--){
if(st[x][j]==1)break;
a[x][j]=i++;
st[x][j]=1;
y=j;
}
}
x--;
if(x>=1){
//从下往上存入
for(int j=x;;j--){
if(st[j][y]==1)break;
a[j][y]=i++;
st[j][y]=1;
x=j;
}
}
y++;
if(i==(n*m+1) )break;
}
//输出存入的数
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
每日一题(蛇形矩阵)
于 2023-03-26 21:48:39 首次发布