📄 zigzag.cpp
字号:
// Zigzag.cpp: implementation of the CZigzag class.
//////////////////////////////////////////////////////////////////////
/********************************************************************/
/* *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--* */
/* | 中国科学院计算技术研究所 | */
/* *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--* */
/* 编程环境: Visual C++ 6.0 (Windows 2000) */
/* 作 者: 唐 胜 */
/* 邮 箱: ts@ict.ac.cn */
/* 发布版本: V1.1 */
/* 发布日期: July. 09, 2005 */
/* 功能说明:Zigzag和行列序号的转换类Zigzag的实现程序 */
/********************************************************************/
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Zigzag.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/************************************************************************
修改日期:2005-07-09
功能说明: 构造函数
调用格式:
参数说明: m:块的总行数,n:块的总列数
输出说明: 无
函数调用: 无
*************************************************************************/
CZigzag::CZigzag(int m, int n)
{
m_row=m;
m_col=n;
m_Zigzag2Y= NULL;
m_Zigzag2X= NULL;
m_XY2Zigzag= NULL;
}
/************************************************************************
修改日期:2005-07-09
功能说明: 析构函数
调用格式:
参数说明: 无
输出说明: 无
函数调用: 无
*************************************************************************/
CZigzag::~CZigzag()
{
if (m_Zigzag2Y!=NULL)
delete [] m_Zigzag2Y;
if (m_Zigzag2X!=NULL)
delete [] m_Zigzag2X;
if (m_XY2Zigzag!=NULL)
delete [] m_XY2Zigzag;
}
/************************************************************************
修改日期:2004-09-12
功能说明: 生成Zigzag序号及逆序号
调用格式: ZigEncode()
参数说明: 无
输出说明: 成功返回true,分配内存不足时返回false
函数调用: 无
*************************************************************************/
bool CZigzag::ZigEncode()
{
int blknum=m_row*m_col;
m_Zigzag2Y=new int[blknum];
if (!m_Zigzag2Y)
return false;
m_Zigzag2X=new int[blknum];
if (!m_Zigzag2X)
return false;
m_XY2Zigzag=new int[blknum];
if (!m_XY2Zigzag)
return false;
int i, j, k;
int S=0;
m_XY2Zigzag[0]=S;
m_Zigzag2X[S]=0;
m_Zigzag2Y[S]=0;
for (i=1; i<m_col; i=i+2)
{
k=i;
for (j=0; j<m_row && k>=0; j++)
{
m_XY2Zigzag[j*m_col+k]=++S;
m_Zigzag2X[S]=j;
m_Zigzag2Y[S]=k;
k--;
}
if (j==m_row)
break;
if (k<0)
k++;
for (; j>=0 && k<m_col; j--)
{
m_XY2Zigzag[j*m_col+k]=++S;
m_Zigzag2X[S]=j;
m_Zigzag2Y[S]=k;
k++;
}
if (k==m_col)
break;
}
if (j==m_row)
{
k=k+2;
for (i=k; i<m_col; i=i+2)
{
k=i;
j--;
for (; j>=0 && k<m_col; j--)
{
m_XY2Zigzag[j*m_col+k]=++S;
m_Zigzag2X[S]=j;
m_Zigzag2Y[S]=k;
k++;
}
if (k==m_col)
{
k--;
j=j+2;
}
else
{
j++;
}
for (; j<m_row && k>=0; j++)
{
m_XY2Zigzag[j*m_col+k]=++S;
m_Zigzag2X[S]=j;
m_Zigzag2Y[S]=k;
k--;
}
}
}
if (k==m_col)
{
j=j+2;
for (; j<m_row; j=j+2)
{
i=j;
k--;
for (; i<m_row && k>=0; i++)
{
m_XY2Zigzag[i*m_col+k]=++S;
m_Zigzag2X[S]=i;
m_Zigzag2Y[S]=k;
k--;
}
if (i==m_row)
{
i--;
k=k+2;
}
else
{
k++;
}
for (; i>=0 && k<m_col; i--)
{
m_XY2Zigzag[i*m_col+k]=++S;
m_Zigzag2X[S]=i;
m_Zigzag2Y[S]=k;
k++;
}
}
}
return true;
}
/************************************************************************
修改日期:2005-07-09
功能说明: 返回坐标为(i,j)的Zigzag序号
调用格式: XY2Zigzag(i, j)
参数说明: i:行坐标(从0开始),j:列坐标(从0开始)
输出说明: 返回坐标为(i,j)的Zigzag序号
函数调用: 无
*************************************************************************/
int CZigzag::XY2Zigzag(int i, int j)
{
if (m_XY2Zigzag!=NULL)
return m_XY2Zigzag[i*m_col+j];
else
return -1;
}
/************************************************************************
修改日期:2005-07-09
功能说明: 返回Zigzag序号为z的行序号
调用格式: Zigzag2X(z)
参数说明: z:指定的Zigzag序号
输出说明: 返回Zigzag序号为z的行序号(从0开始)
函数调用: 无
*************************************************************************/
int CZigzag::Zigzag2X(int z)
{
if (m_Zigzag2X!=NULL)
return m_Zigzag2X[z];
else
return -1;
}
/************************************************************************
修改日期:2005-07-09
功能说明: 返回Zigzag序号为z的列序号
调用格式: Zigzag2X(z)
参数说明: z:指定的Zigzag序号
输出说明: 返回Zigzag序号为z的列序号(从0开始)
函数调用: 无
*************************************************************************/
int CZigzag::Zigzag2Y(int z)
{
if (m_Zigzag2Y!=NULL)
return m_Zigzag2Y[z];
else
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -