[//]: # y总解法 方向向量单循环解决
题解
即向上一格 x-1 y
向右一格 x y+1
向下一格 x+1 y
向左一格 x y-1
刚开始是向右开始走 走改变方向的条件是 越界 或 重复
每一次改变方向 都是顺时针转动 九十°
直到走完全程
#include<iostream>
#include<cstdio>
#define N 110
using namespace std;
int m,n;
int q[N][N];
int main()
{ scanf("%d%d",&n,&m);
int dx[]={-1,0,1,0},dy[]={0,1,0,-1}; //设置四个方向 分别是上右下左 按顺时针顺序放
int x=0,y=0,p=1;
for(int i=1;i<=m*n;i++)
{ q[x][y]=i;
int a=x+dx[p],b=y+dy[p]; //设置一个 下一个预期的格子判断有没有越界重复
if(a>=n||a<0||b<0||b>=m||q[a][b]) //判断是否越界 重复 如果是的就改变方向
{
p=(p+1)%4;
a=x+dx[p],b=y+dy[p];
}
x=a,y=b;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%d",q[i][j]);
printf("\n");
}
}