我在正方形(即區域)的網格中執行一些地理計算。我使用的是Delphi,但是這個邏輯也可能應用於C++。讓我先解釋一下我想做什麼。訪問或省略不存在的數據
下面的圖像是「穿過層運動」一個我的網格,其通過二維陣列Square
,它表示在每個正方形的中心點表示的部分,並且:
綠色方塊的X和Y座標爲2,因此是Square[2,2]
。實際座標存儲在Square[2,2].Latitude
和Square[2,2].Longitude
中,以及例如其他信息。我用於計算的Square[2,2].Info
。
現在的目的是:我需要對周邊地區進行一些計算。有多少周邊地區可以稱爲「鄰居」,取決於我定義了多少「層」。在上面的圖片中,我使用了這兩個「圖層」。這意味着,從綠色單元開始時,我繞過一次(藍色箭頭),然後再次在第二層(紅色箭頭)中移動。
現在出現這個問題:如果我開始在Square[1,1]
(綠色正方形)而不是Square[2,2]
(如下圖所示),第二層(紅色)會嘗試訪問左側和底部的數據不存在(即在「-1」列和行中)。看到下面的圖片。當然,這個問題發生在所有邊界。
我大概可以用IF語句爲每個場景中的例外,但如果有常見的編程「招數」,您試圖訪問數據不存在,可以處理這種情況我不知道。
例如,我想如果我可以按照第一張圖片中描繪的箭頭的圖案每次訪問所有相鄰方塊,即使存在不存在的方塊,它也會非常方便。所以,看着第一張圖片,在Square[3,0]
之後,你會看到Square[3,-1]
等東西,然後最終回到Square[0,3]
的「可行」區域。
我投票結束這個過於寬泛。 StackOverflow不適合人們爲您編寫算法,或者推薦關於算法設計的教程。請將您的問題重點放在特定問題上。 –
在嘗試優化代碼之前,需要處理的最大可能數據集是什麼?您是否通過循環遍歷每個元素,在最大的數據集上嘗試了傳統的O(n)方法?如果訪問每個元素的作品,你可能會這樣做。 – user3437460
@RemyLebeau:對不起,我已經編輯了這篇文章,以便更加關注點和編程問題。 – artnaz