C++ 代码
#include<bits/stdc++.h>
using namespace std;
int st[105][105];
int dx[] = {-1,0,1,0}; //四个偏移量可以背过 右下左上
int dy[] = {0,1,0,-1};
int main(){
int n,m;
cin>>n>>m;
int x=0,y=0,d=1;
for (int i=1;i<=n*m;i++){ // 一共走n*m次
st[x][y]=i; // 当前位置计数
int a=x+dx[d]; // 走下一格
int b=y+dy[d]; // 走下一格
if(a<0||a>=n||b<0||b>=m||st[a][b]){ // 撞墙或者走重复格子
d=(d+1)%4; //1 2 3 0 1 2 3 0, 1是右 2是下 3是上 4是左
a=x+dx[d],b=y+dy[d]; // 走下一个格子
}
x=a,y=b; //否则,让xy更新
}
for(int i=0;i<n;i++){ // 输出
for(int j=0;j<m;j++)
cout<<st[i][j]<<" ";
cout<<endl;
}
return 0;
}