蛇形矩阵,先定义两个偏移量dx,dy,从k=1开始循环至k<=n*m,d为方向变量,当出界||遇到有值的数时改变方向,同时重新判断a,b的值,最后分别赋给x,y,结束一次循环
#include<iostream>
#include<cstdio>
using namespace std;
int res[105][105];
int main()
{
int n,m;
cin>>n>>m;
int dx[]= {0,1,0,-1},dy[]= {1,0,-1,0};
for(int x=0,y=0,d=0,k=1; k<=n*m; k++)
{
res[x][y]=k;
int a=x+dx[d],b=y+dy[d];
if(a<0||a>=n||b<0||b>=m||res[a][b])
{
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
printf("%d ",res[i][j]);
printf("\n");
}
return 0;
}