种子填充算法

 老师讲的四邻域种子填充算法,是像素出栈了就不再进栈。如果没有出栈就可以继续进栈(包括没有进过栈的 和现在在栈里面的)。网上也有视频是,只要在栈里面就不再二次进栈了,我也不知道哪个对,问一下豆包

不同教程对“是否允许重复进栈”的说法差异,本质是算法实现细节的不同,主要分为“允许重复进栈”和“严格单次进栈”两种设计:

1. 允许重复进栈(简化实现)

• 特点:不额外记录“已入栈像素”,只要邻域像素符合条件就压栈,出栈时再判断是否已处理。

• 优势:逻辑简单,代码易写;

• 劣势:栈中可能出现重复元素,增加少量栈操作开销,但不影响正确性。因为填充颜色的时候会进行判断,该点是否已被填充。

2. 严格单次进栈(优化实现)

• 特点:额外维护一个“已入栈标记数组”,像素压栈前先检查该数组:

◦ 若未入栈 → 压栈+标记为“已入栈”;

◦ 若已入栈 → 直接跳过。

• 优势:避免栈中重复元素,减少栈操作次数;

• 劣势:多维护一个标记数组,逻辑稍复杂。

结论

两种实现都是合理的:

• 入门教程常采用“允许重复进栈”(降低理解门槛);

• 工程实现可能用“严格单次进栈”(优化性能)。
核心区别是是否在“压栈前”增加一次标记检查,但最终填充结果是一致的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值