思路:打印一条斜线时行列下标和为定值。使用标志位记录是向上打印还是向下打印,每次打印完取反即可。注意打印的起点和终点要在数组的范围内,向下打印终点最大 为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;
        }
    }
}