题意:
一个n*n的矩阵,找一个路径,经过所有的点,并且上升次数不大于下降次数。
解析:
直接蛇形构造路径,然后正序和逆序哪个下降多就输出哪个
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int t,n,a[N][N];
signed main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
}
vector<int>v;
for(int i=1;i<=n;i++){
if(i%2==0){
for(int j=1;j<=n;j++) v.push_back(a[i][j]);
}
else{
for(int j=n;j>=1;j--) v.push_back(a[i][j]);
}
}
int cnt=0;
for(int i=0;i<n*n-1;i++){
if(v[i]<v[i+1]) cnt++;
}
if(cnt<=n*n-1-cnt){
int f=1;
for(int i=0;i<n*n;i++){
if(f) f=0;
else printf(" ");
printf("%d",v[i]);
}
}
else{
int f=1;
for(int i=n*n-1;i>=0;i--){
if(f) f=0;
else printf(" ");
printf("%d",v[i]);
}
}
puts("");
}
return 0;
}