2016-10-18 68 views
-1

我不知道如何弄清楚這個問題,我只是計算機科學的初學者。在二維數組中尋找「軌跡」

輸入將是二維數組A [n] [n]數字,表示地形表面的地形圖。輸入中還有一個起始位置(r,c)。參考條目A [r] [c]

如果您計劃登山步道,您將受到相鄰條目之間高程差異的限制。一個人可以在兩個相鄰的地點之間穿行,如果他們的海拔相差不超過2)。鄰接只遵循4個標準羅盤方向,(所以我假設沒有對角線)。因此,如果地圖上的某個點可以通過任何相鄰序列序列從A [r] [c]遍歷,則認爲該點可達。

編寫一個計算所有可達位置的算法。輸出將是另一個具有true/fals值的二維數組R [n] [n]。 (我假設真正意味着可達,假意味着無法達到)

如果我正確理解這個問題,我可以創建以下矩陣。 (假設A [10] [10]看起來像這樣從A [0] [0] :)

50 51 54 58 60 60 60 63 68 71 
48 52 51 59 60 60 63 63 69 70 
44 48 52 55 58 61 64 64 66 69 
44 46 53 52 57 60 60 61 65 68 
42 45 50 54 59 61 63 63 66 70 
38 42 46 56 56 63 64 61 64 62 
36 40 44 50 58 60 66 65 62 61 
36 39 42 49 56 62 67 66 65 60 
30 36 40 47 50 64 64 63 62 60 
50 50 50 50 50 50 50 50 50 50 

兩個南部和東部是穿越從A [0] [0]所以可達條目是:

50 51 54 58 60 60 60 63 68 71 
48 52 51 59 60 60 63 63 69 70 
44 48 52 55 58 61 64 64 66 69 
44 46 53 52 57 60 60 61 65 68 
42 45 50 54 59 61 63 63 66 70 
38 42 46 56 56 63 64 61 64 62 
36 40 44 50 58 60 66 65 62 61 
36 39 42 49 56 62 67 66 65 60 
30 36 40 47 50 64 64 63 62 60 
50 50 50 50 50 50 50 50 50 50 

因此我可以斷定,我的結果數組應該是

1 1 0 0 0 0 0 1 0 0 
1 1 1 0 0 0 1 1 0 0 
0 0 1 0 0 0 1 1 1 0 
0 0 1 1 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 1 0 
0 0 0 1 1 0 0 0 1 1 
0 0 0 0 1 1 0 0 1 1 
0 0 0 0 1 1 0 0 0 1 
0 0 0 0 0 1 1 1 1 1 
0 0 0 0 0 0 0 0 0 0 

我們的教授要求我們在僞代碼來實現這一點。我不知道如何比較兩個相鄰點和點的4個方向。任何人都可以給我一些想法?

回答

1

這只是洪水填充。您需要一個隊列和一個索引可尋址的「訪問」標誌向量。將根放入隊列中。如果隊列不空,取第一個元素,並檢查N,S,E,W的可達位置。然後檢查他們是否被訪問過。如果不是,將它們標記爲已訪問,並將它們放入隊列中。