种子填充算法

问题描述:

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

基础算法

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

算法伪代码

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

算法性能分析

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

算法改进

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

小结

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

相关文章
相关标签/搜索