我有一个8x8阵列,并希望将其转换为具有64个字段的1d阵列。 但是在这个特殊的之字形顺序中:
我想要聪明的方式,但我没有线索。我有两种可能的理论,但它们并不聪明。有什么想法吗?
答案 0 :(得分:3)
拥有一个包含64个条目的数组,这些条目按照Z字形模式访问它们的顺序保存索引。您可能会将它们用作某些缓冲区的偏移量。这是JPEG的东西吗?
int[] zigzag = {0, 1, 8, 16, 9, 2, ... etc};
答案 1 :(得分:2)
你可以试试这个:当你开始时,你向右迈出一步,然后沿着允许对角线的唯一方向(首先是西南方向)进行对角线移动,并一直循环直到柱[0]。你向下移动1步(使用一个标志来检查你之前是否向前迈出了一步,如果此标志之前为真,你只能向下移动;你可以将此标志改为false并将向下标志更改为true)并再次沿唯一允许的方向(东北方向)采取对角线直到你遇到行[0]。这将很好,直到AC [70],因为没有向下移动。此时,将右侧和下侧的标志重置为false,然后重新启动该过程。
答案 2 :(得分:0)
在谷歌搜索的任何人的帮助下,找不到答案,这是我提出的一个简单的perl算法来解决问题。
sub getPos{
my ($x,$y,$size)=@_;
my $d = $x+$y;
my $m = $d-$size;
my $p = (($d%2)?$x:$y);
my $dist = ($d*($d+1))/2;
my $index = $dist + $p;
if($d >= $size){
$index -= ($m+1)**2;
}
return $index;
}
你这样使用它:
for(my $x = 0; $x < $size; $x++){
for(my $y = 0; $y < $size; $y++){
$OneArray[getPos($x, $y, $size)] = $TwoArray[$x][$y];
}
}
$OneArray
是您要将$TwoArray
转换为。{/ p>的1D数组