y总方法详细注释版
//模拟
#include<iostream>
using namespace std;
int arr[110][110];
//数组开在堆上,初始值全为0
int main()
{
int n ,m;
cin >> n >> m;
int res=1;//待填充的值,也是遍历次数的判断条件
int x=0, y=0;//待填充坐标
int dir_x[]={0, 1, 0, -1}, dir_y[]={1, 0, -1, 0};//决定x,y往哪个地方走
int index=0;//dir_x、dir_y的下标,表明下一个待填充的位置怎么走。通过下标决定下一个填充位置的方向
for(res=1; res<=n*m; res++)
{
arr[x][y] = res;
int i=0, j=0; //用来临时存储坐标,防止有效坐标被更改
//使用i,j来测试下一个有效坐标在哪里,是否需要转向
i = x + dir_x[index];
j = y + dir_y[index];
//判断i, j是不是有效坐标;这里可以画图模拟一遍!
if(i<0||i>=n || j<0||j>=m || arr[i][j])
{
//到这里就代表i,j不是有效坐标,需要转向
index = (index+1)%4;//让index一直在数组中循环0~3
//更新正确的i,j
i = x + dir_x[index];
j = y + dir_y[index];
}
x = i;
y = j;
}
//output
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}