最近做了個圈地的遊戲,根據玩家行走路徑和自己的領地區域圈出自己的新領地。自己在演算法這方面比較薄弱,這次也趁機修煉了一波,寫下自己的心得和感悟在這裡。可能寫的不好,希望看到的僅供參考,不足之處和錯誤之處多謝指正。
八連通演算法其實就是給定乙個種子點,通過迴圈查詢以自己為中心的3*3其他八個點,滿足要求的就填充自己的顏色,並呼叫該點旁邊的八個點,不滿足就跳出,迴圈往復。八連通演算法是相對簡單的一種演算法,不過它的缺點也很明顯,那就是遞迴導致效率低。而且必須要有種子。對於給定行走路徑的圈地來說,種子點需要確定,遞迴導致的卡慢使得圈地的瞬間比較卡頓。所以並沒有選擇這種演算法,不過這裡也標記一下八連通演算法。
將八個方向基於種子節點的座標存入陣列,等下迴圈的時候使用
var direction_8 = [ cc.v2(-1, 0), cc.v2(-1, 1), cc.v2(0, 1), cc.v2(1, 1), cc.v2(1, 0), cc.v2(1, -1), cc.v2(0, -1), cc.v2(-1, -1) ];
填充方法:
areafill(x, y) {
let self = this;
if(self.tiledlayer.gettilegidat(x, y) == 1){ //我這裡使用的是瓦片地圖 根據瓦片的gid值判定是不是自己的區域
self.tiledlayer.settilegid(2,x, y);
for(let i = 0; i < direction_8.length; i++){
self.floodseedfill(x + direction_8[i].x,y + direction_8[i].y); //遞迴呼叫
8連通 4連通的洪氾填充以及邊界填
運用八連通邊界填充演算法 進行多邊形的填充 1 首先通過顏色混合的方式形成乙個圖形包中函式的對多邊形的填充,如下圖所示 注 主要 如下 實現多邊形的簡單填充 include include void init void void linesegment void int main int argc,...
uva572 dfs求八連塊
題意 輸入乙個 m 行 n 列的字元矩陣,統計字元 能組成多少八連塊,如果兩個字元 所在的格仔相鄰 橫豎或者對角線的方向 就 說他們組成了乙個八連塊,問圖中一共有多少個八連塊。sample input 1 1 3 5 1 8 5 5 0 0sample output 0 1 22 分析 圖和二叉樹一...
洛谷八連測 R7
list 題目鏈結 t1 每次spfa 或者bfs 時間複雜度o spfa q 每次先把每乙個查詢的特殊點入隊,距離為0 spfa或者bfs即可。include include include include include include define ll long long using nam...