非方蛇形矩阵
注意if break 判断
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,m,v=1;
cin>>n>>m;
int M[110][110];
int minc=0,maxc=m-1,minr=0,maxr=n-1;
//cout<<"info:"<<minc<<" "<<maxc<<" "<<minr<<" "<<maxr<<endl;
for(int i=1;i<=n*m;)
{
for(int j=minc;j<=maxc;j++,i++)
M[minr][j]=v++;
minr++;
if(minr>maxr)break;
for(int j=minr;j<=maxr;j++,i++)
M[j][maxc]=v++;
maxc--;
if(minc>maxc)break;
for(int j=maxc;j>=minc;j--,i++)
M[maxr][j]=v++;
maxr--;
if(minr>maxr)break;
for(int j=maxr;j>=minr;j--,i++)
M[j][minc]=v++;
minc++;
if(minc>maxc)break;
//cout<<"info:"<<minc<<" "<<maxc<<" "<<minr<<" "<<maxr<<endl;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<M[i][j]<<" ";
cout<<endl;
}
return 0;
}