模拟法,对初始矩阵进行蛇形赋值,函数接收当前行/列赋值方向,当遇到不为0的元素或到达边界说明当前行/列赋值完毕,递归调用函数改变方向进行下一行/列的赋值
#include<iostream>
/*
command: right-0,down-1,left-2,up-3
*/
using namespace std;
const int N=105;
int n,m;
int arr[N][N];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int x,y,cnt=1;
void solve(int derict){
if(arr[x+dx[derict]][y+dy[derict]]) return;
while(!arr[x+dx[derict]][y+dy[derict]]&&y+dy[derict]<=m&&x+dx[derict]<n&&y+dy[derict]>0&&x+dx[derict]>=0){
x+=dx[derict],y+=dy[derict];
arr[x][y]=cnt++;
}
solve((derict+1)%4);
}
int main(){
cin>>n>>m;
solve(0);
for(int i=0;i<n;i++){
for(int j=1;j<=m;j++)
cout<<arr[i][j]<<" ";
cout<<endl;
}
return 0;
}
大佬牛批