回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下
输入:
输入第一行是两个不超过 200 的正整数 m, n,表示矩阵的行和列。接下来 m 行每行 n 个整数,表示这个矩阵。
输出:
输出只有一行,共 mn 个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
该题比较简单
#include<bits/stdc++.h>
using namespace std;
int a[201][201]; //存矩阵
int vis[201][201]; //标记这个坐标的点是否已经取过
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 x=1, y=1;
cout << a[1][1];
vis[1][1] = 1; //标记这个坐标点已经取过
int sum = 1;
while(sum < n*m){ //下面分别处理上、下、左、右四个方向
while(x+1<=n && vis[x+1][y]==0){
cout << " " << a[++x][y] ;
vis[x][y]=1;
sum++;
}
while(y+1<=m && vis[x][y+1]==0){
cout << " " << a[x][++y] ;
vis[x][y]=1;
sum++;
}
while(x-1>=1 && vis[x-1][y]==0){
cout << " " << a[--x][y] ;
vis[x][y]=1;
sum++;
}
while(y-1>=1 && vis[x][y-1]==0){
cout << " " << a[x][--y] ;
vis[x][y] = 1;
sum++;
}
}
return 0;
}