搜索算法练习——图像填充问题

图像填充问题:给定一个二维网格和一个起始像素点,将与起始像素点相邻且颜色相同的像素点填充成目标颜色。

我们分别使用深度优先搜索(DFS)和广度优先搜索(BFS)来解决图像填充问题,即将与起始像素点相邻且颜色相同的像素点填充成目标颜色。

首先,我们需要定义一个二维网格的表示方法。我们可以使用二维列表来表示网格。

深度优先搜索(DFS)方法:

def dfs_fill(image, sr, sc, newColor):"""使用深度优先搜索(DFS)来填充图像中相邻像素点的颜色。Parameters:image (list): 二维网格表示的图像。sr (int): 起始像素点的行坐标。sc (int): 起始像素点的列坐标。newColor: 目标颜色。Returns:list: 填充后的图像。"""def dfs(r, c, color):if r < 0 or r >= len(image) or c < 0 or c >= len(image[0]) or image[r][c] != color:returnimage[r][c] = newColordfs(r + 1, c, color)dfs(r - 1, c, color)dfs(r, c + 1, color)dfs(r, c - 1, color)color = image[sr][sc]if color != newColor:dfs(sr, sc, color)return image# 示例二维网格表示的图像
image = [[1, 1, 1],[1, 1, 0],[1, 0, 1]
]
# 起始像素点的坐标和目标颜色
sr, sc, newColor = 1, 1, 2# 填充图像
filled_image = dfs_fill(image, sr, sc, newColor)
print("填充后的图像(使用DFS):", filled_image)

广度优先搜索(BFS)方法:

from collections import dequedef bfs_fill(image, sr, sc, newColor):"""使用广度优先搜索(BFS)来填充图像中相邻像素点的颜色。Parameters:image (list): 二维网格表示的图像。sr (int): 起始像素点的行坐标。sc (int): 起始像素点的列坐标。newColor: 目标颜色。Returns:list: 填充后的图像。"""color = image[sr][sc]if color == newColor:return imagequeue = deque([(sr, sc)])directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]while queue:r, c = queue.popleft()image[r][c] = newColorfor dr, dc in directions:nr, nc = r + dr, c + dcif 0 <= nr < len(image) and 0 <= nc < len(image[0]) and image[nr][nc] == color:queue.append((nr, nc))return image# 示例二维网格表示的图像
image = [[1, 1, 1],[1, 1, 0],[1, 0, 1]
]
# 起始像素点的坐标和目标颜色
sr, sc, newColor = 1, 1, 2# 填充图像
filled_image = bfs_fill(image, sr, sc, newColor)
print("填充后的图像(使用BFS):", filled_image)

上述代码分别使用了深度优先搜索(DFS)和广度优先搜索(BFS)来填充图像中与起始像素点相邻且颜色相同的像素点。填充过程中,我们使用递归的方式来实现深度优先搜索,使用队列和迭代的方式来实现广度优先搜索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/784067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务之分布式事务概念

微服务之分布式事务概念 CAP定理和Base理论 CAP定理 CAP定理在1998年被加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 一致性&#xff08;Consistency&#xff09;可用性&#xff08;Availability&#xff09;分区容错性&#xff…

线上系统时间慢八个小时的排查之路

最近有一个新项目上线&#xff0c;在上线时&#xff0c;突然发现时间与正常时间对不上&#xff0c;少了八个小时&#xff1b;但我丝毫不慌&#xff0c;这不就是个时区的问题吗&#xff0c;简单&#xff0c;但是这一次它给我深深的上了一课&#xff0c;一起来看整个排查过程吧。…

交替子数组计数 - 力扣题解

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

HarmonyOS实战开发-如何实现一个简单的健康生活应用(下)

获取成就 本节将介绍成就页面。 功能概述 成就页面展示用户可以获取的所有勋章&#xff0c;当用户满足一定的条件时&#xff0c;将点亮本页面对应的勋章&#xff0c;没有得到的成就勋章处于熄灭状态。共有六种勋章&#xff0c;当用户连续完成任务打卡3天、7天、30天、50天、…

MySQL中如何进行多表查询

目录 一、子查询 1.什么是子查询 2.注意事项 二、联结查询 1.什么是联结 2.内部联结&#xff08;等值联结&#xff09; ①WHERE语句 ②ON语句 3.自联结 4.自然联结 5.外部联结 三、组合查询 1.什么是组合查询 2.UNION规则 *本节涉及概念来源于图灵程序设计丛书&a…

GUN C/C++ (GCC/CLANG) 对于 __int128_t (128位有符号大整数的扩展支持平台限制)

鉴于我们对于GCC&#xff0c;在多个CPU目标平台上适用 __int128&#xff08;GCC扩展&#xff09;兼容的情况&#xff0c;目前 __int128 仅限在编译64位可执行程序平台被支持。 本文将列出目标CPU平台的支援情况&#xff1a; X86 不支持&#xff08;i386、i686&#…

笔记: 数据结构与算法--时间复杂度二分查找数组

算法复杂度 不依赖于环境因素事前分析法 计算最坏情况的时间复杂度每一条语句的执行时间都按照t来计算 时间复杂度 大O表示法 n 数据量 ; f(n) 实际的执行条数当存在一个n0 , 使得 n > n0,并且 c * g(n) 恒> f(n) : 渐进上界(算法最坏的情况)那么f(n)的时间复杂度 …

【前端面试3+1】07vue2和vue3的区别、vue3响应原理及为什么使用proxy、vue的生命周期中在什么时期给接口发请求、【找出数组最大公约数】

一、vue2和vue3的区别 1.性能优化&#xff1a; Vue 3在性能方面有很大的提升&#xff0c;主要是通过虚拟DOM的优化和响应式系统的改进实现的。 虚拟 DOM 重构&#xff1a;Vue 3 中对虚拟 DOM 进行了重构&#xff0c;使得更新算法更加高效&#xff0c;减少了更新时的开销&#x…

14 - grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)

@[TOC](grace数据处理 - 泄露误差改正 - 空域滤波法(Mascon法)) 空域法的基本思想是假设地面某区域的质量变化是由一系列位置已知、质量未知的质量块(小范围区域)引起的,那么将GRACE反演的结果归算到n个质量块上的过程就是泄露信号恢复的过程。个人理解是这样的:假定已知研…

gtsam::Pose3的compose()函数作用

#include <gtsam/geometry/Pose3.h> #include <iostream> int main(int argc, char** argv) {// B 的旋转量为绕 x 轴旋转 180 度gtsam::Pose3 B gtsam::Pose3(gtsam::Rot3(0, 1, 0, 0), gtsam::Point3(1, 2, 0));// A 的旋转量为绕 z 轴旋转 180 度gtsam::Pose3 A…

Linux零基础入门之华为欧拉系统安装

一、名词解释 Linux&#xff1f; Linux是一个开源的免费的操作系统&#xff0c;功能与windows一样。具有处理器管理&#xff0c;存储管理&#xff0c;设备管理&#xff0c;文件管理&#xff0c;作业管理等功能。 可以俗称为Linux操作系统&#xff0c;组织或个人&#xff0c;…

【FIFO】Standard / FWFT FIFO设计实现(一)——同步时钟

标准FIFO 本文使用位扩展的方式实现标准FIFO&#xff0c;原理可参考【AXIS】AXI-Stream FIFO设计实现&#xff08;一&#xff09;——基本模式&#xff0c;核心代码如下&#xff1a; logic [FIFO_DEPTH_WIDTH : 0] rd_ptr_r d0, wr_ptr_r d0;always_ff (posedge clk) beginif…

软考108-上午题-【结构化开发】-杂题+小结

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 数据流图到软件体系结构的映射 根据数据流的特点&#xff0c;可以将数据流图分为&#xff1a; 变换型数据流图事务型数据流图 其对应的映射分别为&#xff1a; 变换分析事物分析 一个…

网安学习笔记-day11,FTP服务器

FTP服务器 FTP介绍 FTP(File Transfer Protocol)文件传输协议 端口号&#xff1a;TCP 20/21 工作方式&#xff1a; 主动模式被动模式 服务器部署 准备阶段 配置IP windowsXP 192.168.1.21&#xff08;也可DHCP自动获取&#xff09; Windows2003 192.168.1.1 安装万维网…

ssm停车场管理系统

点赞收藏关注 → 私信领取本源代码、数据库 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于停车场管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了停…

146. 序列

题意&#xff1a; 有t个测试用例。 每个测试用例&#xff0c;包含m个数组&#xff0c;每个数组包含n个数字。你可以从每个数组里面选择一个数字&#xff0c;然后将m个数字加和得到一个数字。用这样的方式一共可以获得n的m次幂个数字。问&#xff0c;在这么多个数字中选出最小…

[leetcode]28. 找出字符串中第一个匹配项的下标

前言&#xff1a;力扣刷题 问题&#xff1a; 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例&…

全面对比API和SDK

目录 全面对比API和SDK1. 介绍2. API和SDK的基本概念3. API与SDK的区别4. API与SDK的优缺点对比5. API与SDK的使用场景6. API与SDK的开发和维护成本7. API与SDK的集成和实现方式8. API与SDK的安全性9. API与SDK的性能比较10. API与SDK的选择建议11. 总结 全面对比API和SDK 1. …

【Linux】进程管理:进程及概念精讲

前言&#xff1a;本节内容包含进程管理操作的各种基础概念精讲&#xff0c;同时部分板块包含Linux操作系统与一般操作系统的概念对比。不仅包含“书面概念”&#xff0c;还包含详细操作以及通俗讲解。 目录 一、进程概念引入 二、进程的描述与组织&#xff1a;进程控制块&…

nodejs的express编写http服务器配置跨域

配置跨域可引入cors包&#xff0c;插入到express的中间件中 1.引入cors包 npm install cors2. 使用cors 插入到中间件中 const app express()const corsOptions {origin: http://localhost:5173, // 允许访问的来源&#xff0c;可以是单个字符串或一个数组methods: [PUT],…