//
#include <iostream>
#include <cstdio>
using namespace std;
int res[100][100];
int main()
{
int m,n;
cin>>m>>n;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
//偏移量
for(int x=0,y=n-1,d=0,k=1; x<m,y<n,k<=m*n ;k++)
{
res[x][y]=k;
int a=x+dx[d],b=y+dy[d];
if(a<0||a>=m||b>=n||b<0||res[a][b])
//res[a][b]是重复格子的情况,初始化数组为零,如果走过一遍格子会有数字,需要转弯
{
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}//看是否撞墙或者走到重复的格子
x=a,y=b;//没有的话就更新位置
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
printf("%5d",res[i][j]);
}
cout<<endl;
}
return 0;
}
0 回复
0 转发
0 喜欢
2 阅读



