
老师讲的四邻域种子填充算法,是像素出栈了就不再进栈。如果没有出栈就可以继续进栈(包括没有进过栈的 和现在在栈里面的)。网上也有视频是,只要在栈里面就不再二次进栈了,我也不知道哪个对,问一下豆包
不同教程对“是否允许重复进栈”的说法差异,本质是算法实现细节的不同,主要分为“允许重复进栈”和“严格单次进栈”两种设计:
1. 允许重复进栈(简化实现)
• 特点:不额外记录“已入栈像素”,只要邻域像素符合条件就压栈,出栈时再判断是否已处理。
• 优势:逻辑简单,代码易写;
• 劣势:栈中可能出现重复元素,增加少量栈操作开销,但不影响正确性。因为填充颜色的时候会进行判断,该点是否已被填充。
2. 严格单次进栈(优化实现)
• 特点:额外维护一个“已入栈标记数组”,像素压栈前先检查该数组:
◦ 若未入栈 → 压栈+标记为“已入栈”;
◦ 若已入栈 → 直接跳过。
• 优势:避免栈中重复元素,减少栈操作次数;
• 劣势:多维护一个标记数组,逻辑稍复杂。
结论
两种实现都是合理的:
• 入门教程常采用“允许重复进栈”(降低理解门槛);
• 工程实现可能用“严格单次进栈”(优化性能)。
核心区别是是否在“压栈前”增加一次标记检查,但最终填充结果是一致的。
1813

被折叠的 条评论
为什么被折叠?



