思路:
用vis[][]记录点是否被访问过,然后一次外循环进行一次操作。定义一次操作为输出一个螺旋框(即一个矩阵)。
AC代码
#include<iostream>
#include<cmath>
using namespace std;
int a[600][600];
int vis[600][600];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
int flag=0;
for(int i=1;i<=ceil((double)n/2)&&i<=ceil((double)m/2);i++)
{
for(int j=i;j<=m-i+1;j++)//上
{
if(vis[i][j]==0){
cout<<a[i][j]<<" ";
vis[i][j]=1;
}
}
for(int j=i+1;j<=n-i+1;j++)//右
{
if(vis[j][m-i+1]==0)
{
cout<<a[j][m-i+1]<<" ";
vis[j][m-i+1]=1;
}
}
for(int j=m-i;j>=i;j--)//下
{
if(vis[n-i+1][j]==0)
{
vis[n-i+1][j]=1;
cout<<a[n-i+1][j]<<" ";
}
}
for(int j=n-i;j>i;j--)//左
{
if(vis[j][i]==0)
{
vis[j][i]=1;
cout<<a[j][i]<<" ";
}
}
}
return 0;
}