2013-10-07 52 views
0

假設有一個N×N的正方形2維數組,表示爲一維數組。讓數組爲5x5,如下所示,並且數組中的值不重要。使用列邊界導航數組

std::vector<int> array { 
    0, 1, 2, 3, 4, 
    5, 6, 7, 8, 9, 
    0, 1, 2, 3, 4, 
    5, 6, 7, 8, 9, 
    0, 1, 2, 3, 4 
}; 

如果我們說在這個數組中有5行和5列,如何檢測它們是否在行的邊緣?例如,如果你在第四行9位的索引處,你怎麼知道你可以在不改變行的情況下向左移動,但是向右移動會前進到下一行? 如何才能訪問細胞的邊緣相鄰的邊緣?第四行9的索引沒有右邊的鄰居。

我能想到的如何做到這將是當前索引的唯一方法,在這種情況下是

int index = row * num_cols + col 

,也許使用模量(指數%5 == 0),以確定是否對邊緣。但是這並不能確定我們是可以左轉還是右轉。

回答

1

您可以使用

int row = index/N; 
int col = index % N; 

獲得的行和列的索引。例如,第9項具有行索引9/5 = 1和列索引9%5 = 4。

計算了(row, col)座標後,您可以確定它是否具有左側或右側鄰居。當col == 0,你沒有左鄰居;當col == N-1,你沒有一個正確的鄰居。

1

你式

int index = row * num_cols + col; 

上升或下降相當於加/減num_cols

是正確的。它的反面是

int row = index/num_cols; 
int col = index % num_cols; 

你知道你在左邊緣(index % num_cols) == 0

你知道你在右邊緣時(index % num_cols) == num_cols-1