思路:打印一条斜线时行列下标和为定值。使用标志位记录是向上打印还是向下打印,每次打印完取反即可。注意打印的起点和终点要在数组的范围内,向下打印终点最大 为n-1,向上打印终点最小为0,不能越界。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int m,n,len;
cin>>n;
cin>>m;
bool flag=false;
vector<vector<int>> nums(n,vector<int>(m));
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
cin>>nums[i][j];
for(int i=0;i<m+n-1;++i){
if(flag){
len=min(i,n-1);
for(int j=max(0,i-m+1);j<=len;++j)
cout<<nums[j][i-j]<<" ";
flag=false;
}
else{
len=max(0,i-m+1);
for(int j=min(n-1,i);j>=len;--j)
cout<<nums[j][i-j]<<" ";
flag=true;
}
}
}