zigzag矩阵按照之字形线路产生方法(C++)
#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++)相关推荐
- 打印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 ...
- Z字形扫描(对矩阵进行Z字形扫描)
问题描述: 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 ...
- python连乘函数_动态规划之矩阵连乘问题Python实现方法
本文实例讲述了动态规划之矩阵连乘问题Python实现方法.分享给大家供大家参考,具体如下: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘的,i=1,2 ,-,n-1.如何确定计算矩阵 ...
- 数值分析--矩阵QR分解的三种方法
QR分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为Hessenberg矩阵,然后再应用QR方法求特征值和特征向量.它是将矩阵分解成一个正规正交矩阵Q与上三角形 ...
- BaiduMap---百度地图官方Demo之路径规划功能(介绍公交,驾车和步行三种线路规划方法和自设路线方法)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 矩阵二范数化的向量化方法
计算矩阵二范数化的向量化方法 设矩阵 X=[x1,x2,⋯,xn]∈RmX=\left[x_1, x_2, \cdots, x_n \right] \in \mathbb{R}^{m}X=[x1,x ...
- OpenCV Mat矩阵(图像Mat)初始化及访问方法
一.Mat初始化 1.使用Mat构造函数 //方法一: Mat M( 2, 2, CV_8UC3, Scalar(0,255,0) );//其实是2*6的矩阵,因为每个元素有3个通道. Mat M1( ...
- 矩阵的“之”字形打印
2019独角兽企业重金招聘Python工程师标准>>> 题目:给定一个矩阵matrix, 按照"之"字形的方式打印这个矩阵 例子: 1 2 3 4 5 ...
- matlab zigzag算法,MATLAB 实现zigzag扫描(z字形扫描)
今天在做多媒体作业的时候需要实现JPEG压缩,其中一步就是将量化后的块做zigzag扫描.我在网上找了很久,发现反复流传的就一份MATLAB代码,无奈这份代码跑起来结果和我预料的不一致,于是进行了修改 ...
最新文章
- 微信小程序转发 分享 打电话功能,完整代码附效果图
- 用Fedora发行版本打包RPM,似乎无法对打好的RPM包进行签名?
- radio 微信小程序 点击取消_微信小程序如何实现radio单选框单击打勾和取消
- phppage类封装分页功能_php显示页码分页类的封装
- 编译安装RRDtool报错
- 【机器学习】选择模型
- 中位数±四分位数表达_Python数据分析:强大字符串处理工具,正则表达式
- 火狐浏览器怎么打不开网页
- 2022天府杯国际赛数学建模题目和思路
- mac安装PS cc2019 error问题汇总
- Excel如何将多个工作簿数据合并到一起
- html怎么直接修改,如何编辑运行HTML网页文件(HTML编辑工具使用介绍)
- 51单片机、STM32中生成QRCode二维码
- baq在聊天中啥意思_baq(网络用语baq啥意思)
- 修改app绕过模拟器检测_雷电模拟器(增强版)
- 【总结】GitHub的使用
- STM32C8T6 CAN常见波特率配置表
- JPEG文件格式介绍
- 十进制小数转化为二进制小数
- 咻商跨境电商:shopee虾皮跨境电商——店铺运营篇
热门文章
- mysql join 排序_MySQL查询优化:连接查询排序limit(join、order by、limit语句)
- 网页版Rstudio︱RStudio Server多人在线协作开发
- 普通队列(数组实现)
- Windows MongoDB安装配置
- 通过keepalived搭建lvs高可用集群
- viewpage滑动查看图片并再有缩略图预览
- C# int转string 每三位加一个逗号
- WCF Ria Service“操作失败,指定的命名链接在配置中找不到”错误解决方法
- github速成手册
- c#和javascript分别轻松实现计算24点