问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
#include<iostream>
using namespace std;
int main()
{
int m,n,i,j,t=0;
cin>>m>>n;
int **ferry;
//给二维数组开空间
ferry=new int*[m];
for(i=0;i<m;i++)
{
ferry[i]=new int[n];
}
//输入二维数组
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>ferry[i][j];
}
}
//回形算法
i=0;
j=0;
cout<<ferry[i][j];
ferry[i][j]=-1;
while(t<m*n)
{
while(i+1<m&&ferry[i+1][j]!=-1)//↓
{
cout<<" "<<ferry[++i][j];
ferry[i][j]=-1;
t++;
}
while(j+1<n&&ferry[i][j+1]!=-1)//→
{
cout<<" "<<ferry[i][++j];
ferry[i][j]=-1;
t++;
}
while(i-1>=0&&ferry[i-1][j]!=-1)//↑
{
cout<<" "<<ferry[--i][j];
ferry[i][j]=-1;
t++;
}
while(j-1>=0&&ferry[i][j-1]!=-1)//←
{
cout<<" "<<ferry[i][--j];
ferry[i][j]=-1;
t++;
}
if(t==m*n-1)break;
}
system("pause");
return 0;
}