左神课堂---之字形打印矩阵------宏观调度思想

题目描述:给定一个矩阵,要求按之字形打印出矩阵。


那么打印顺序为:1 2 5 9 6 3 4 7 10 11 8 12

基本思路:定义两个点a,b。刚开始时a点和b点都在(0,0)位置,然后a点往右走,b点往下走,当a点碰到最右边时,a点往下走,当b点碰到最下边时,b点往右走。每走一次,就打印a点,b点对角线上的数字。然后在定义一个bool类型的变量来判断是从右上到左下打印还是从左下到右上打印。

代码如下:

#include<bits/stdc++.h>//基本思路:用一个点a和一个点b,刚开始a,b点都在(0,0)位置,然后a点往右走,b点往下走
using namespace std;//当a点碰到最右边的时候,a往下走。当b碰到最下边时,b往右走。a,b每走一次,打印a,b之间的数
int n;
int m;
int a[10000][10000];
bool p;//布尔类型变量,用来判断是从右上到左下打印还是从左下到右上打印
class heat
{
    //private:
    public:
        void shuru()//输入值
        {
            cin>>n>>m;
            p=true;
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                 cin>>a[i][j];
        }
    public:
        void dayin(int ha,int sa,int hb,int sb,bool p)//打印对角线之间的数字
        {
           if(p)//如果p为true,那么就从右上到左下打印
           {
               while(ha!=hb+1&&sa!=sb-1)
               {
                   cout<<a[ha][sa]<<" ";
                   ha+=1;
                   sa-=1;
               }
           }
           else//从左下到右上打印
           {
               while(hb!=ha-1&&sb!=sa+1)
               {
                   cout<<a[hb][sb]<<" ";
                   hb-=1;
                   sb+=1;
               }
           }
        }
    public:
       void hexin()
       {
          int ha=0,sa=0,hb=0,sb=0;//ha,sa分别代表a点的横坐标,纵坐标。hb,sb分别代表b点的横坐标,纵坐标。
          int endm=m-1,endn=n-1;
          cout<<a[0][0]<<" ";
          while (ha!=endn)//当a点的横坐标到达了最后一行时,隐藏着一个信息,就是sa已经到达了最右边,这时说明a点和b点都已经到最右下的点了
          {
              //注意:判断的顺序不能改变,对于a点的横纵坐标判断,必须先判断横坐标再判断纵坐标,因为横坐标的判断需要a原先的纵坐标
              //如果先判断a的纵坐标,那么a原先的纵坐标就有可能改变了,那么,a接下来要走的横坐标就有可能出错了
              //b点一样

              ha=sa==endm?ha+1:ha;//判断a点下一步应该走的横坐标,如果sa到了最后一列,那么ha应该往下走,否则,不变
              sa=sa==endm?sa:sa+1;//判断a点下一步应该走的纵坐标,如果sa没有到达最后一行,sa继续往右走,否则,sa不变
              sb=hb==endn?sb+1:sb;//同上
              hb=hb==endn?hb:hb+1;
              dayin(ha,sa,hb,sb,p);
              p=!p;//如果这次是右上到左下打印,那么下次一定是左下到右上打印。
          }
       }
};
int main()
{
    heat nul;
    nul.shuru();
    nul.hexin();
}






猜你喜欢

转载自blog.csdn.net/qq_40938077/article/details/80190281