Non-recursive implementation of Flood Fill algorithm?

前端 未结 3 1180
失恋的感觉
失恋的感觉 2021-01-02 05:32

I\'m working on a small drawing application in Java. I\'m trying to create a \'bucket-fill\' tool by implementing the Flood Fill algorithm.

I tried using a recursion

3条回答
  •  滥情空心
    2021-01-02 05:58

    I'm assuming that you have some sort of a grid where you receive the coordinates of the location from where you would like to fill the area.

    Recursive flood fill algorithm is DFS. You can do a BFS to convert it to nonrecursive.

    Basically the idea is similar in both the algorithms. You have a bag in which the nodes that are yet to be seen are kept. You remove a node from the bag and put the valid neighbors of the node back into the bag. If the bag is a stack you get a DFS. If it's a queue you get a BFS.

    the pseudocode is roughly this.

    flood_fill(x,y, check_validity)
       //here check_validity is a function that given coordinates of the point tells you whether
       //the point should be colored or not
       Queue q
       q.push((x,y))
       while (q is not empty)
           (x1,y1) = q.pop()
           color(x1,y1)
    
           if (check_validity(x1+1,y1))
                q.push(x1+1,y1)
           if (check_validity(x1-1,y1))
                q.push(x1-1,y1)
           if (check_validity(x1,y1+1))
                q.push(x1,y1+1)
           if (check_validity(x1,y1-1))
                q.push(x1,y1-1)
    

    NOTE: make sure that check_validity takes into account whether the point is already colored or not.


    • DFS: Depth First Search
    • BFS: Breadth First Search

提交回复
热议问题