2013-09-25 24 views
-1

的遊戲我有一個數組 - 2D(100×100在這種情況下)與一些狀態的邊界內的限制對圖像,如下所示: http://tinypic.com/view.php?pic=mimiw5&s=5#.UkK8WIamiBI從二維數組中排除某些狀態的字段;生活

每個單元都有其自己的ID(顏色,例如綠色是ID = 1)和標誌isBorder(如果真的話,在圖片上標記爲白色)。我試圖做的是排除一組狀態限制邊界(糧食)的狀態,所以我可以單獨工作每個糧食,這意味着我需要存儲每個糧食的所有指標。

任何人有一個想法如何解決它?

回答

1

現在我已經讀過你的問題了......算法與用顏色填充連續區域基本相同。最常見的方法是BFS算法。

簡單地說,在你確定位於當前區域內的某個點開始,然後逐漸向各個方向移動,選擇遍歷字段並將它們放入vector


//編輯:一堆其他的見解,在我理解這個問題之前做出的。

我所能想象的算法是這樣工作的:

vector<2dCoord> result = data.filter(DataType::Green); 
for (2dCoord in result) { 
    // do some operations on data[2dCoord] 
} 

filter以簡單的方式未優化的實施方法是,掃描整個陣列和push_back匹配字段到載體中。

如果你要需要更復雜的查詢,懶洋洋地評估代理對象可以創造奇蹟:

data.filter(DataType::Green) 
    .filter_having_neighbours(DataType::Red) 
    .closest(/*first*/ 100, /*from*/ 2dCoord(x,y)) 
    .apply([](DataField& field) { 
     // processing here 
    });