小明在玩画图软件时,不小心把一桶蓝色油漆泼到了地板上。
油漆从泼洒点开始,向四周蔓延扩散——流到相邻的空地,再流到更远的空地……
第1步:油漆到达泼洒点 🟦
第2步:油漆流向上下左右四个相邻的空格 🟦🟦🟦
第3步:每个被染色的格子继续向四周扩散 🟦🟦🟦🟦🟦
直到:遇到墙壁(障碍物)或边界,油漆不再扩散 ⛔
最终,所有与泼洒点连通的空地都被染成了蓝色!
这个过程就是Flood Fill(泛洪算法)的核心思想:从一个起始点出发,沿着"可通行"的路径向四周扩展,直到填满整个连通区域。
Flood Fill = 从一点出发,沿连通路径蔓延,填满整个区域
💡 画图软件中的"油漆桶工具"
你在画图软件中用油漆桶点一下某个区域,整个连通区域就被填充了颜色——这就是 Flood Fill 最直观的应用!
• 点击位置 = 起始点
• 相同颜色的相邻像素 = 可通行路径
• 不同颜色的像素 = 障碍物(边界)
• 填充完成 = 整个连通区域被染色
关键问题:如何高效地遍历整个连通区域?用 BFS 还是 DFS?