关于蛇形矩阵(3月23日)的题解
矩阵的大小为n*n,故边界为[1,n]。所以一旦tx,ty,超出边界,就需转向。
即tx>n||ty>n||tx<1||ty<1
。
需要注意的是遇到之前已经填过数字的方格也需要转向。
即map[tx][ty]>0
。
#include <iostream>
#include <cstdio>
using namespace std;
int a[110][110];
int main(){
int n,m;
cin>>n>>m;
int dx[] = {0,1,0,-1},dy[]={1,0,-1,0}; //因为只有四个方向所以d++时需要%4,使得d只能是是这样
int x = 0,y = 0,d = 0;
for(int i = 1;i <= n*m;i++){
a[x][y] = i;
int q =x + dx[d],w =y + dy[d];
if(q >= n||w >= m||q < 0|| w < 0 ||a[q][w]){
d = (d+1)%4;
q =x+ dx[d];
w =y+ dy[d];
}
x=q,y=w;
}
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}