#include <iostream> #include<string> #include<algorithm> using namespace std; const int maxn=10005; int a[maxn][maxn]; bool vis[maxn][maxn]={false};//是否访问数组 int main () { int m,n;//m行n列的矩阵 int i,j; int cnt=0;//计算输出元素个数 cin>>m>>n; i=0;j=0;//初始化起点坐标 while(cnt<n*m) { while(j<n&&!vis[i][j])//turn right { cnt++;a[i][j]=cnt; vis[i][j]=true; j++; }i++;j--;//和之前我写1-n*n填数是一样的 while(i<m&&!vis[i][j])//turn down { cnt++;a[i][j]=cnt; vis[i][j]=true; i++; }i--;j--; while(j>=0&&!vis[i][j])//turn left { cnt++;a[i][j]=cnt; vis[i][j]=true; j--; }i--;j++; while(i>=0&&!vis[i][j])//turn up { cnt++;a[i][j]=cnt; vis[i][j]=true; i--; }i++;j++; } for(int i=0;i<m;i++){ for(j=0;j<n;j++){ if(j<n-1) printf("%2d ",a[i][j]); else printf("%2d ",a[i][j]); } } }