博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
之字形打印矩阵
阅读量:6282 次
发布时间:2019-06-22

本文共 1635 字,大约阅读时间需要 5 分钟。

Problem:

  “之”字形打印矩阵【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,
  例如: 1 2 3 4 5 6 7 8 9 10 11 12
  “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12
  【要求】 额外空间复杂度为O(1)

Solution:

  使用A,B两个坐标,初始值为(0,0),(0,0),A,B的连线为之字形的斜线
  A移动方向为向右走,B移动方向为向下走,A到最右边了就向下走,B到最下面了就向右走
  使用一个bool值,判断是向右上方方向遍历A-B直线,还是向左下角方向遍历A-B直线
     A
     |
  B- 1  2  3  4
       5  6  7  8
      9  1   0  5

 

Code:

  

1 #include 
2 3 using namespace std; 4 5 template
6 void ZiPrint(const T arr, const int x, const int y) 7 { 8 int Ax = 0, Ay = 0;//初始化A,B的坐标 9 int Bx = 0, By = 0;10 bool flag = true;//true为右上方方向遍历, false为左下角方向遍历11 12 while (Ax <= x-1 && Ay <= y-1)//A到右下角就遍历完毕13 {14 if(flag)//右上方方向遍历15 {16 int Tx = Bx, Ty = By;17 while (Tx >= Ax || Ty <= Ay)18 {19 cout << arr[Tx][Ty] << " ";20 Tx -= 1;21 Ty += 1;22 }23 flag = false;24 }25 else//向左下角方向遍历26 {27 int Tx = Ax, Ty = Ay;28 while (Tx <= Bx || Ty >= By)29 {30 cout << arr[Tx][Ty] << " ";31 Tx += 1;32 Ty -= 1;33 }34 flag = true;35 }36 //更新A,B37 if (Ay < y - 1)38 Ay += 1;39 else40 Ax += 1;41 42 if (Bx < x - 1)43 Bx += 1;44 else45 By += 1;46 47 }48 cout << endl;49 50 }51 52 void Test()53 {54 int aa[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };55 ZiPrint(aa, 3, 4);56 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10989199.html

你可能感兴趣的文章
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>