这是个研究一个点移动的很好的经典例题,他用了dx[]和dy[]来模拟移动,这样代码看起来简洁,避免了多个if条件判断的理由
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
const int N=110;
int main()
{
cin>>n>>m;
int q[N][N];//这里要定义多于100,否则会有越界
//定义移动方向,这里是四个方向
int dx[]={-1,0,1,0}, dy[]={0,1,0,-1}; //分别对应上右下左
int x=0,y=0,d=1;//d=1是因为先往右边走
int a,b;
for(int i=1;i<=n*m; i++)
{
q[x][y]=i;
a=x+dx[d], b=y+dy[d];//判断下一个点是否符合规则
if(a<0 || a>=n || b<0 || b>=m || q[a][b])
{
d=(d+1)%4;//修改方向
a=x+dx[d], b=y+dy[d];//重新更新 新的点
}
//更新x,y
x=a;
y=b;
}
for(int i=0 ;i<n; i++)
{
for(int j=0;j<m; j++) cout<<q[i][j]<<' ';
cout<<endl;
}
return 0;
}