JPEG Z字编排问题:具体 略;(自行百度
#include "pch.h"
#include <iostream>
#include<iomanip>
using namespace std;
#define SIZE 8
int main()
{
int martix[SIZE][SIZE] = { 0 };
int a[SIZE][SIZE] = { 0 };
int i, j, x, y, value = 0;
int *p;
p = &martix[0][0];
//初始化矩阵
for (i = 0;i < SIZE*SIZE;i++)
{
*p++ = i;
}
//打印原始矩阵
cout << "原始矩阵如下:" << endl;
for (i = 0;i < SIZE;i++)
{
for (j = 0;j < SIZE;j++)
{
cout << setw(4) << *(*(martix + i) + j);//注意:*(martix+i)是第i行的首地址,这里按序输出i行j列的值
}
cout << endl;
}
i = 0;
j = 0;
//进行z字编排
//
for (x = 0;x < SIZE;x++)
{
for (y = 0;y < SIZE;y++)
{
*(*(a + i) + j) = *(*(martix + x) + y);//按z字在martix中遍历,然后将结果放入到a中
if ((i == SIZE - 1 || i == 0) && j % 2 == 0)//如果在矩阵中,i=0或i=7,同时j是偶数(注意数组从0开始),此时,遍历路径就是在矩阵中向右移动一格
{
j++;//存储位置
continue;
}
if ((j == 0 || j == SIZE - 1) && i % 2 == 1)
{
i++;
continue;
}
if ((i + j) % 2 == 0)
{
i--;
j++;
}
else if ((i + j) % 2 == 1)
{
i++;
j--;
}
}
cout << endl << "经过z字编码过后的矩阵如下:" << endl;
for (i = 0;i < SIZE;i++)
{
for (j = 0;j < SIZE;j++)
{
cout << setw(4) << *(*(a + i) + j);
}
cout << endl;
}
cin.get();
return 0;
}
}