我得到了一個8x8數組,並希望將其轉換爲64字段的1d數組。 但在這個特殊的Z字形順序:二維數組到一維數組算法與鋸齒形的秩序
我想聰明的辦法,但我沒有線索。我有兩種可能的理論,但他們不聰明。任何想法?
我得到了一個8x8數組,並希望將其轉換爲64字段的1d數組。 但在這個特殊的Z字形順序:二維數組到一維數組算法與鋸齒形的秩序
我想聰明的辦法,但我沒有線索。我有兩種可能的理論,但他們不聰明。任何想法?
擁有一個64個條目的數組,它們按鋸齒形模式訪問它們的順序保存索引。您可能會將它們用作某個緩衝區的偏移量。這是JPEG的東西吧?
int[] zigzag = {0, 1, 8, 16, 9, 2, ... etc};
你可以試試這個:當你開始,你拿1步到右側,然後拿在允許對角線的唯一方向的對角線移動(在第一,這是西南),和所有環路直到列[0]的方式。你向下移動1步(用一個標誌檢查你以前是否向右移動了1步,如果此標誌爲真,則只能向下移動;可以將此標誌更改爲false並將down標誌更改爲true)並再次在唯一允許的方向(東北)取對角線,直到您碰到第[0]行。在AC [70]之前這樣會好,因爲沒有下降。此時,將右側和下側的兩個標誌重置爲false並重新啓動該過程。
對於任何人的幫助谷歌搜索,無法找到答案,這裏有一個簡單的Perl算法,我想出來解決這個問題。
sub getPos{
my ($x,$y,$size)[email protected]_;
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
到一維數組。
我正要寫一個答案,但看到你的用戶名認爲它可能不是我的時間的生產性用途... –
也許這將有助於..對於每條對角線,索引的總和將是常數..和方向翻轉......應該能夠用這個通用循環來構建。 – PeskyGnat
不要以封面來判斷一本書。無論如何,如果你不想提供一些有生產力的想法,那麼避免這樣的評論。 – vo1d