#include<iostream>
using namespace std;void zigzag(int**M, int N)
{/** example N=5 结果*    0       1       5       6       14      15      27      28*    2       4       7       13      16      26      29      42*    3       8       12      17      25      30      41      43*    9       11      18      24      31      40      44      53*    10      19      23      32      39      45      52      54*    20      22      33      38      46      51      55      60*    21      34      37      47      50      56      59      61*    35      36      48      49      57      58      62      63**//*prestep表示上一步的动作,其值及其对应关系如下:case 1:上一步向右走case 2;上一步左下走case 3:上一步向下走case 4:上一步右上走*/int prestep;int count = 0;int i = 0;int j = 0;*(*(M + i) + j) = count;count++;prestep = 4;while (count < N*N){if (i == 0)//上边界走法
        {if (j == N - 1){if (prestep == 1)//上一步右,接着左下
                {i++; j--;prestep = 2;}else if (prestep == 4){i++;prestep = 3;}}else if (prestep == 4)//上一步右上方向走,则现在向右走一步;
            {j++;prestep = 1;}else if (prestep == 1)//上一步向右走,现在需要向左下走一步;
            {i++;j--;prestep = 2;}else{cerr << "error 1!" << endl;return;}}else if (i == N - 1)//下边界走法
        {if (prestep == 2)//上一步左下方向,则向右走
            {j++;prestep = 1;}else if (prestep == 1 || prestep == 3)//上一步向右走,则像右上走;
            {i--;j++;prestep = 4;}else{cerr << "error 2!" << endl;return;}}else if (j == 0)//左边界
        {if (prestep == 2)//上一步左下,这一步向下
            {i++;prestep = 3;}else if (prestep == 3)//上一步向下,这一步右上
            {i--;j++;prestep = 4;}else{cerr << "error 3!" << endl;return;}}else if (j == N - 1)//右边界
        {if (prestep == 4)//上一步右上,这一步向下
            {i++;prestep = 3;}else if (prestep == 3 || prestep == 1)//上一步向下,这一步左下
            {i++; j--;prestep = 2;}else{cerr << "error 4!" << endl;return;}}else{if (prestep == 2)//上一步左下,接着左下
            {i++; j--;prestep = 2;}else if (prestep == 4)//上一步右上,这一步接着右上
            {i--; j++;prestep = 4;}else{cerr << "error 5!" << endl;return;}}*(*(M + i) + j) = count++;}
}
int main()
{   int N;cout << "please input N:";cin >> N;int **M = (int**)malloc(sizeof(int *)*N);for (int i = 0; i < N; i++){*(M + i) = (int *)malloc(sizeof(int)*N);}zigzag(M, N);for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){cout << *(*(M+i)+j) << "\t";}cout << endl;}for (int i = 0; i < N; i++){free(*(M + i));}free(M);
}

转载于:https://www.cnblogs.com/dongchuanniu/p/3668884.html

zigzag矩阵按照之字形线路产生方法(C++)相关推荐

  1. 打印zigzag矩阵

    /** * 描述:打印zigzag矩阵 * 0 1 5 6 14 15 27 28 * 2 4 7 13 16 26 29 42 * 3 8 12 17 25 30 41 43 * 9 11 18 2 ...

  2. Z字形扫描(对矩阵进行Z字形扫描)

    问题描述: 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 ...

  3. python连乘函数_动态规划之矩阵连乘问题Python实现方法

    本文实例讲述了动态规划之矩阵连乘问题Python实现方法.分享给大家供大家参考,具体如下: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘的,i=1,2 ,-,n-1.如何确定计算矩阵 ...

  4. 数值分析--矩阵QR分解的三种方法

    QR分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量.它是将矩阵分解成一个正规正交矩阵Q与上三角形 ...

  5. BaiduMap---百度地图官方Demo之路径规划功能(介绍公交,驾车和步行三种线路规划方法和自设路线方法)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  6. 矩阵二范数化的向量化方法

    计算矩阵二范数化的向量化方法 设矩阵 X=[x1,x2,⋯,xn]∈RmX=\left[x_1, x_2, \cdots, x_n \right] \in \mathbb{R}^{m}X=[x1​,x ...

  7. OpenCV Mat矩阵(图像Mat)初始化及访问方法

    一.Mat初始化 1.使用Mat构造函数 //方法一: Mat M( 2, 2, CV_8UC3, Scalar(0,255,0) );//其实是2*6的矩阵,因为每个元素有3个通道. Mat M1( ...

  8. 矩阵的“之”字形打印

    2019独角兽企业重金招聘Python工程师标准>>> 题目:给定一个矩阵matrix, 按照"之"字形的方式打印这个矩阵 例子: 1   2   3   4 5 ...

  9. matlab zigzag算法,MATLAB 实现zigzag扫描(z字形扫描)

    今天在做多媒体作业的时候需要实现JPEG压缩,其中一步就是将量化后的块做zigzag扫描.我在网上找了很久,发现反复流传的就一份MATLAB代码,无奈这份代码跑起来结果和我预料的不一致,于是进行了修改 ...

最新文章

  1. 微信小程序转发 分享 打电话功能,完整代码附效果图
  2. 用Fedora发行版本打包RPM,似乎无法对打好的RPM包进行签名?
  3. radio 微信小程序 点击取消_微信小程序如何实现radio单选框单击打勾和取消
  4. phppage类封装分页功能_php显示页码分页类的封装
  5. 编译安装RRDtool报错
  6. 【机器学习】选择模型
  7. 中位数±四分位数表达_Python数据分析:强大字符串处理工具,正则表达式
  8. 火狐浏览器怎么打不开网页
  9. 2022天府杯国际赛数学建模题目和思路
  10. mac安装PS cc2019 error问题汇总
  11. Excel如何将多个工作簿数据合并到一起
  12. html怎么直接修改,如何编辑运行HTML网页文件(HTML编辑工具使用介绍)
  13. 51单片机、STM32中生成QRCode二维码
  14. baq在聊天中啥意思_baq(网络用语baq啥意思)
  15. 修改app绕过模拟器检测_雷电模拟器(增强版)
  16. 【总结】GitHub的使用
  17. STM32C8T6 CAN常见波特率配置表
  18. JPEG文件格式介绍
  19. 十进制小数转化为二进制小数
  20. 咻商跨境电商:shopee虾皮跨境电商——店铺运营篇

热门文章

  1. mysql join 排序_MySQL查询优化:连接查询排序limit(join、order by、limit语句)
  2. 网页版Rstudio︱RStudio Server多人在线协作开发
  3. 普通队列(数组实现)
  4. Windows MongoDB安装配置
  5. 通过keepalived搭建lvs高可用集群
  6. viewpage滑动查看图片并再有缩略图预览
  7. C# int转string 每三位加一个逗号
  8. WCF Ria Service“操作失败,指定的命名链接在配置中找不到”错误解决方法
  9. github速成手册
  10. c#和javascript分别轻松实现计算24点