思路
用g来表示某个数是不是被取过了,然后就是从外围取到内围,先下再右再上再左再下的顺序去取数
代码
#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int a[220][220];
int g[200][200];
vector<int> ans;
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;int y=1;
while(!g[x][y]&&x>=1&&y>=1&&x<=n&&y<=m){
while(!g[x][y]&&x>=1&&y>=1&&x<=n&&y<=m){
ans.push_back(a[x][y]);
g[x][y]=1;
x++;
}
x--;
y++;
while(!g[x][y]&&x>=1&&y>=1&&x<=n&&y<=m){
ans.push_back(a[x][y]);
g[x][y]=1;
y++;
}
y--;
x--;
while(!g[x][y]&&x>=1&&y>=1&&x<=n&&y<=m){
ans.push_back(a[x][y]);
g[x][y]=1;
x--;
}
x++;
y--;
while(!g[x][y]&&x>=1&&y>=1&&x<=n&&y<=m){
ans.push_back(a[x][y]);
g[x][y]=1;
y--;
}
y++;
x++;
}
for(int i=0;i<ans.size();i++)cout << ans[i] << " " ;
}