4

我有世界地圖的黑白圖片。查找城市所連接的最大地塊的算法?

我將像素轉換爲由座標(i,j)索引的二進制值的網格(水爲0,陸地爲1)。現在,假設我隨機在陸地上選擇一個點,這次它在美國德克薩斯州的某個地方。我想知道我可以前往的所有點的(i,j)座標,而不必穿越水域。在這種情況下,它將是所有北美和南美(減去任何周圍島嶼)中的任何(i,j)。

(這背後的動機是我試圖實現並行c。將SIR感染模型。)

非常感謝您的幫助。

編輯:我也很有興趣,如果有任何近似的方法(我不是太大驚小怪,如果一些微小的離岸島嶼被錯誤包括在內。),也許四叉樹一樣齧合的方法?再次感謝。

+3

嘗試一下[flood fill](http://en.wikipedia.org/wiki/Flood_fill)。 – irrelephant

+0

這似乎是一個簡單的洪水填充算法會做的伎倆。有幾十種可供選擇的實現。 –

回答

8

您正在查找flood fill algorithm。它可以遞歸地完成,也可以手動維護堆棧或使用隊列。

+0

謝謝@Thomas,我看了一下算法,但是從我收集的內容來看,它本質上是逐像素檢查,看起來很慢。 如果我可以容忍一定的誤差範圍(如果包括一些小的離岸島嶼,不會有太大的變化),那麼是否沒有基於網格方法的算法(如通過四叉樹)? – mchen

+0

你真的試過它是否足夠快?這隻會檢查每個像素最多一次,因此它在像素數量上是線性的。它不能更有效率地完成,因爲你要求有可以傳送的點的座標,這也是像素數量的線性關係(在一般情況下)。如果您需要進行大量查找,則可以將地圖預處理爲連接的組件,並在恆定時間內進行查詢。 – Thomas

+0

再次感謝。你知道一個並行的實現嗎?通過MPI或OpenMP(或兩者)都可以。 謝謝。 – mchen