?? 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 + -