1

问题描述:

在多边形区域内部填充某元素。

基础算法

种子算法,即从内部某一点开始填充,再递归填充周围的点(上下左右——四连通)。直到遇到边界。

算法伪代码

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);
        }
}

算法性能分析

在实际应用中,出现了递归调用栈溢出的情况,先在这里留坑,下次再补上具体的数据吧。

算法改进

基础算法在实际应用中,除了上面所说的当填充面积过大时,出现栈溢出的错误外,还会出现重复填充,很大程度上影响效率。一种改进思路就是,建立一个存放每条连续扫描线的最右端点的堆栈。在这篇论文中有具体的伪代码实现扫描线种子填充算法的改进

小结

这个算法算是递归思想的一种应用,其性能自然也是和递归密切相关。分析这一块还没细想。留坑待填。


皮德
69 声望32 粉丝

mada mada dane.