問題描述:
在多邊形區域內部填充某元素。
基礎演算法
種子演算法,即從內部某一點開始填充,再遞迴填充周圍的點(上下左右——四連通)。直到遇到邊界。
演算法虛擬碼
void tianchong(int x,int y,int color){
if point(x,y) out of the Boundary
then return
else{
point(x,y).setcolor(color);
tianchong(x,y+1,color);
tianchong(x,y-1,color);
tianchong(x-1,y,color);
tianchong(x+1,y,color);
}
}
演算法效能分析
在實際應用中,出現了遞迴呼叫棧溢位的情況,先在這裡留坑,下次再補上具體的資料吧。
演算法改進
基礎演算法在實際應用中,除了上面所說的當填充面積過大時,出現棧溢位的錯誤外,還會出現重複填充,很大程度上影響效率。一種改進思路就是,建立一個存放每條連續掃描線的最右端點的堆疊。在這篇論文中有具體的虛擬碼實現掃描線種子填充演算法的改進。
小結
這個演算法算是遞迴思想的一種應用,其效能自然也是和遞迴密切相關。分析這一塊還沒細想。留坑待填。