洪水填充(Flood fill)算法

洪水填充(Flood fill)算法html

從一個起始節點開始把附近與其連通的節點提取出或填充成不一樣顏色顏色,直到封閉區域內的全部節點都被處理過爲止,是從一個區域中提取若干個連通的點與其餘相鄰區域區分開(或分別染成不一樣顏色)的經典算法。算法

由於其思路相似洪水從一個區域擴散到全部能到達的區域而得名。在GNU Go和掃雷中,Flood Fill算法被用來計算須要被清除的區域。ui


洪水填充算法接受三個參數:起始節點,目標節點特徵和針對提取對象要執行的處理。.net


目前有許多實現方式,基本上都顯式的或隱式的使用了隊列或者棧。code

洪水填充算法實現最多見有四鄰域填充法(不考慮對角線方向的節點),八鄰域填充法(考慮對角線方向的節點),基於掃描線填充方法。htm

根據實現又能夠分爲遞歸與非遞歸(基於棧)。對象

最簡單的實現方法是採用深度優先搜索的遞歸方法,也能夠採用廣度優先搜索的迭代來實現。blog

基於遞歸實現的泛洪填充算法有個致命的缺點,就是對於大的區域填充時可能致使棧溢出錯誤,遞歸

基於掃描線的算法實現了一種非遞歸的洪水填充算法。隊列


除提出連通區域外,還能夠應用於計算從某一節點開始,到可能到達其餘全部節點的距離。好比解決像走迷宮這類的問題。


參考資料:

1.圖像處理之泛洪填充算法(Flood Fill Algorithm)

http://blog.csdn.net/jia20003/article/details/8908464

2.Flood Fill Algorithm

http://acm.nudt.edu.cn/~twcourse/ConnectedComponentLabeling.html#a1

3.QuickFill: An efficient flood fill algorithm.

http://www.codeproject.com/Articles/6017/QuickFill-An-efficient-flood-fill-algorithm

相關文章
相關標籤/搜索