//NUM可取任意自然数
int Zscan(int datain[NUM][NUM], int dataout[NUM * NUM])
{
int i, j, k, c;
for (i = 0, j = 0, k = 0, c = 0; k < NUM * NUM; k++)
{
dataout[k] = datain[i][j];
if (i == 0 && j == 0)
c = 0;
else if (c == 0 && j == 0)
c = 1;
else if (c == 0 && j == (NUM - 1))
c = 3;
else if (c == 1 && j == NUM - 1)
c = 0;
else if (c == 1 && i == 0)
c = 2;
else if (c == 1)
c = 1;
else if (c == 2 && i == 0)
c = 3;
else if (c == 2 && i == (NUM - 1))
c = 1;
else if (c == 3 && i == (NUM - 1))
c = 2;
else if (c == 3 && j == 0)
c = 0;
else if (c == 3)
c = 3;
else
return 0;
if (c == 0)//水平向右
{
i++;
}
else if (c == 1)//斜向左下
{
i--;
j++;
}
else if (c == 2)//垂直向下
{
j++;
}
else if (c == 3)//斜向右上
{
i++;
j--;
}
else
{
cout << "Zscan error" << endl;
return 0;//error
}
}
return 1;
}
int IZscan(int datain[NUM * NUM], int dataout[NUM][NUM])
{
int i, j, k, c;
for (i = 0, j = 0, k = 0, c = 0; k < NUM * NUM; k++)
{
datain[k] = dataout[i][j];
if (i == 0 && j == 0)
c = 0;
else if (c == 0 && j == 0)
c = 1;
else if (c == 0 && j == (NUM - 1))
c = 3;
else if (c == 1 && j == NUM - 1)
c = 0;
else if (c == 1 && i == 0)
c = 2;
else if (c == 1)
c = 1;
else if (c == 2 && i == 0)
c = 3;
else if (c == 2 && i == (NUM - 1))
c = 1;
else if (c == 3 && i == (NUM - 1))
c = 2;
else if (c == 3 && j == 0)
c = 0;
else if (c == 3)
c = 3;
else
return 0;
if (c == 0)//水平向右
{
i++;
}
else if (c == 1)//斜向左下
{
i--;
j++;
}
else if (c == 2)//垂直向下
{
j++;
}
else if (c == 3)//斜向右上
{
i++;
j--;
}
else
{
cout << "error" << endl;
return 0;//error
}
}
return 1;
}