BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路
目录
一、733. 图像渲染 - 力扣(LeetCode)
算法代码:
算法思路
基础参数
函数入口
检查条件
初始化 BFS
BFS 填充过程
返回结果
复杂度分析
总结
二、200. 岛屿数量 - 力扣(LeetCode)
算法代码:
算法思路
基础参数
函数入口
遍历网格
BFS 遍历
返回结果
复杂度分析
总结
三、695. 岛屿的最大面积 - 力扣(LeetCode)
算法代码:
算法思路
基础参数
函数入口
遍历网格
BFS 遍历
返回结果
复杂度分析
总结
四、130. 被围绕的区域 - 力扣(LeetCode)
算法代码:
算法思路
基础参数
函数入口
处理边界上的 'O' 区域
还原棋盘
BFS 遍历
复杂度分析
总结
一、733. 图像渲染 - 力扣(LeetCode)
算法代码:
class Solution {typedef pair<int, int> PII; // 定义坐标对int dx[4] = {0, 0, 1, -1}; // 四个方向的x偏移量int dy[4] = {1, -1, 0, 0}; // 四个方向的y偏移量public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc,int color) {int prev = image[sr][sc]; // 获取起始点的原始颜色if (prev == color) // 如果目标颜色与原始颜色相同,直接返回return image;int m = image.size(), n = image[0].size(); // 获取图像的尺寸queue<PII> q; // 初始化队列q.push({sr, sc}); // 将起始坐标入队while (!q.empty()) { // BFS循环auto [a, b] = q.front(); // 获取队首元素image[a][b] = color; // 将当前点的颜色设为目标颜色q.pop(); // 移除队首元素// 遍历四个方向for (int i = 0; i < 4; i++) {int x = a + dx[i], y = b + dy[i]; // 计算相邻坐标// 检查坐标是否在图像范围内,并且颜色是否与原始颜色相同if (x >= 0 && x < m && y >= 0 && y < n && image[x][y] == prev) {q.push({x, y}); // 将符合条件的坐标入队}}}return image; // 返回填充后的图像}
};
算法思路
-
基础参数
-
使用
typedef pair<int, int> PII
定义一个坐标对,方便存储和操作点的坐标。 -
dx
和dy
数组用于表示四个方向的移动(右、左、下、上)。
-
-
函数入口
-
floodFill
函数接收一个图像image
(二维数组),起始坐标sr
和sc
,以及要填充的颜色color
。
-
-
检查条件
-
首先获取起始点的原始颜色
prev
,如果该颜色已经是目标颜色color
,则直接返回原图像,避免不必要的操作。
-
-
初始化 BFS
-
获取图像的尺寸
m
和n
。 -
使用一个队列
q
来管理待处理的坐标。 -
将起始坐标
(sr, sc)
入队。
-
-
BFS 填充过程
-
进入循环,直到队列为空:
-
从队列中取出当前坐标
(a, b)
。 -
将该坐标的颜色设置为
color
。 -
遍历四个方向,计算相邻坐标
(x, y)
。 -
检查新坐标是否在图像范围内,以及该坐标的颜色是否与
prev
相同。如果满足条件,则将新坐标入队。
-
-
-
返回结果
-
循环结束后,返回填充后的图像。
-
复杂度分析
-
时间复杂度:O(N),N 为图像中像素的总数。在最坏情况下,所有像素都可能被访问。
-
空间复杂度:O(N),队列在最坏情况下可能需要存储所有的像素。
总结
这个实现有效地解决了洪水填充问题,通过广度优先搜索遍历所有与起始点相连的相同颜色区域并将其填充为目标颜色。可以根据需要调整该实现以适应更复杂的场景或者使用 DFS(深度优先搜索)来实现同样的功能。
二、200. 岛屿数量 - 力扣(LeetCode)
算法代码:
class Solution {int dx[4] = {1, -1, 0, 0}; // 表示上下左右的x偏移int dy[4] = {0, 0, 1, -1}; // 表示上下左右的y偏移bool vis[301][301]; // 记录访问状态int m, n; // 网格的行数和列数public:int numIslands(vector<vector<char>>& grid) {m = grid.size(); // 获取行数n = grid[0].size(); // 获取列数int ret = 0; // 初始化岛屿计数器for (int i = 0; i < m; i++) { // 遍历每一行for (int j = 0; j < n; j++) { // 遍历每一列if (grid[i][j] == '1' && !vis[i][j]) { // 找到一个新的岛屿ret++; // 增加岛屿计数bfs(grid, i, j); // 用BFS标记这个岛屿}}}return ret; // 返回岛屿总数}void bfs(vector<vector<char>>& grid, int i, int j) {queue<pair<int, int>> q; // 初始化队列q.push({i, j}); // 入队当前坐标vis[i][j] = true; // 标记为已访问while (q.size()) { // BFS循环auto [a, b] = q.front(); // 获取队首元素q.pop(); // 移除队首元素for (int k = 0; k < 4; k++) { // 遍历四个方向int x = a + dx[k], y = b + dy[k]; // 计算相邻坐标// 检查是否在边界内,并且为 '1' 且未访问if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == '1' && !vis[x][y]) {q.push({x, y}); // 入队vis[x][y] = true; // 标记为已访问}}}}
};
算法思路
-
基础参数
-
使用
dx
和dy
数组来表示四个方向的移动(上下左右)。 -
vis
数组用于标记已经访问过的网格,避免重复计算。
-
-
函数入口
-
numIslands
函数接收一个二维网格grid
作为输入,返回岛屿的数量。
-
-
遍历网格
-
计算网格的行数
m
和列数n
。 -
使用双重循环遍历每个格子:
-
当遇到
'1'
且未被访问过时,说明找到了一个新的岛屿,计数器ret
加一,并调用bfs
函数来遍历和标记这个岛屿的所有部分。
-
-
-
BFS 遍历
-
在
bfs
函数中:-
初始化一个队列,将当前陆地坐标入队,并将其标记为已访问。
-
进入循环,直到队列为空:
-
从队列中取出当前坐标
(a, b)
。 -
遍历四个方向,计算相邻坐标
(x, y)
。 -
检查新坐标是否在网格范围内,且该坐标为
'1'
且未被访问过。如果满足条件,则将新坐标入队并标记为已访问。
-
-
-
-
返回结果
-
循环完成后,返回计数器
ret
的值,表示岛屿的总数量。
-
复杂度分析
-
时间复杂度:O(M * N),其中 M 是行数,N 是列数。在最坏情况下,所有格子都可能被访问一次。
-
空间复杂度:O(M * N),用于存储访问状态
vis
,在最坏情况下,可能需要存储整个网格的状态。
总结
这个实现有效地解决了“岛屿数量”问题,通过广度优先搜索(BFS)遍历所有相连的陆地('1'
),并将其标记为已访问,以避免重复计数。可以根据需要将 BFS 替换为深度优先搜索(DFS)以实现相同的功能。总之,该算法能够高效地计算出网格中的岛屿数量,尤其适用于处理大型的二维网格问题。
三、695. 岛屿的最大面积 - 力扣(LeetCode)
算法代码:
class Solution {int dx[4] = {0, 0, 1, -1}; // 表示上下左右的x偏移int dy[4] = {1, -1, 0, 0}; // 表示上下左右的y偏移bool vis[51][51]; // 记录访问状态(假设最大网格为51x51)int m, n; // 网格的行数和列数public:int maxAreaOfIsland(vector<vector<int>>& grid) {m = grid.size(); // 获取行数n = grid[0].size(); // 获取列数int ret = 0; // 初始化最大面积计数器for (int i = 0; i < m; i++) { // 遍历每一行for (int j = 0; j < n; j++) { // 遍历每一列if (grid[i][j] == 1 && !vis[i][j]) { // 找到一个新的岛屿ret = max(ret, bfs(grid, i, j)); // 计算岛屿面积并更新最大面积}}}return ret; // 返回最大岛屿面积}int bfs(vector<vector<int>>& grid, int i, int j) {int count = 0; // 初始化当前岛屿面积计数queue<pair<int, int>> q; // 初始化队列q.push({i, j}); // 入队当前坐标vis[i][j] = true; // 标记为已访问count++; // 当前岛屿面积增加while (q.size()) { // BFS循环auto [a, b] = q.front(); // 获取队首元素q.pop(); // 移除队首元素for (int k = 0; k < 4; k++) { // 遍历四个方向int x = a + dx[k], y = b + dy[k]; // 计算相邻坐标// 检查是否在边界内,并且为 '1' 且未访问if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1 && !vis[x][y]) {q.push({x, y}); // 入队vis[x][y] = true; // 标记为已访问count++; // 增加岛屿面积}}}return count; // 返回当前岛屿的面积}
};
算法思路
-
基础参数
-
dx
和dy
数组用来表示四个方向的移动(右、左、下、上)。 -
vis
数组用于标记已经访问过的格子,以避免重复计算。
-
-
函数入口
-
maxAreaOfIsland
函数接收一个二维网格grid
作为输入,返回最大的岛屿面积。
-
-
遍历网格
-
计算网格的行数
m
和列数n
。 -
使用双重循环遍历每个格子:
-
当遇到
1
(陆地)且未被访问过时,调用bfs
函数来计算这个岛屿的面积,并更新最大面积ret
。
-
-
-
BFS 遍历
-
在
bfs
函数中:-
初始化一个计数器
count
用于记录岛屿的面积。 -
将当前陆地坐标入队,并标记为已访问,同时将
count
增加。 -
进入循环,直到队列为空:
-
从队列中取出当前坐标
(a, b)
。 -
遍历四个方向,计算相邻坐标
(x, y)
。 -
检查新坐标是否在网格范围内,且该坐标为
1
且未被访问过。如果满足条件,则将新坐标入队并标记为已访问,同时增加count
。
-
-
-
-
返回结果
-
循环完成后,返回最大的岛屿面积
ret
。
-
复杂度分析
-
时间复杂度:O(M * N),其中 M 是行数,N 是列数。在最坏情况下,所有格子都可能被访问一次。
-
空间复杂度:O(M * N),用于存储访问状态
vis
,在最坏情况下,可能需要存储整个网格的状态。
总结
这个实现有效地解决了“最大岛屿面积”问题,通过广度优先搜索(BFS)遍历所有相连的陆地(1
),并计算其面积。该算法能够高效地找到最大的岛屿面积,尤其适用于处理大型的二维网格问题。如果需要,也可以将 BFS 替换为深度优先搜索(DFS)以实现相同的功能。总之,该算法能够在给定的网格中快速找到并计算最大岛屿的面积。
四、130. 被围绕的区域 - 力扣(LeetCode)
算法代码:
class Solution {int dx[4] = {0, 0, 1, -1}; // 表示上下左右的x偏移int dy[4] = {1, -1, 0, 0}; // 表示上下左右的y偏移int m, n; // 棋盘的行数和列数public:void solve(vector<vector<char>>& board) {m = board.size(); // 获取行数n = board[0].size(); // 获取列数// 1. 处理边界上的 'O' 联通块,全部修改成 '.'for (int j = 0; j < n; j++) {if (board[0][j] == 'O') // 第一行bfs(board, 0, j);if (board[m - 1][j] == 'O') // 最后一行bfs(board, m - 1, j);}for (int i = 0; i < m; i++) {if (board[i][0] == 'O') // 第一列bfs(board, i, 0);if (board[i][n - 1] == 'O') // 最后一列bfs(board, i, n - 1);}// 2. 还原剩余的区域for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (board[i][j] == 'O') // 被围住的区域变为 'X'board[i][j] = 'X';else if (board[i][j] == '.') // 安全的区域还原为 'O'board[i][j] = 'O';}}}void bfs(vector<vector<char>>& board, int i, int j) {queue<pair<int, int>> q; // 初始化队列q.push({i, j}); // 入队当前坐标board[i][j] = '.'; // 将其标记为已访问(安全)while (q.size()) { // BFS循环auto [a, b] = q.front(); // 获取队首元素q.pop(); // 移除队首元素for (int k = 0; k < 4; k++) { // 遍历四个方向int x = a + dx[k], y = b + dy[k]; // 计算相邻坐标// 检查是否在边界内,并且为 'O'if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O') {q.push({x, y}); // 入队board[x][y] = '.'; // 标记为已访问(安全)}}}}
};
算法思路
-
基础参数
-
dx
和dy
数组用来表示四个方向的移动(上下左右)。 -
m
和n
分别表示棋盘的行数和列数。
-
-
函数入口
-
solve
函数接收一个二维棋盘board
,用于处理其中的'O'
区域。
-
-
处理边界上的
'O'
区域-
通过双重循环遍历棋盘的边界(第一行、最后一行、第一列、最后一列):
-
当遇到
'O'
时,调用bfs
函数,将其和与之相连的所有'O'
修改为'.'
,表示这些'O'
是安全的,不会被围住。
-
-
-
还原棋盘
-
遍历整个棋盘,将剩余的
'O'
(被围住的)改为'X'
,将'.'
还原为'O'
。
-
-
BFS 遍历
-
在
bfs
函数中:-
初始化一个队列,将当前坐标入队,并将其改为
'.'
。 -
进入循环,直到队列为空:
-
从队列中取出当前坐标
(a, b)
。 -
遍历四个方向,计算相邻坐标
(x, y)
。 -
检查新坐标是否在棋盘范围内,且该坐标为
'O'
,如果满足条件,则将新坐标入队并改为'.'
。
-
-
-
复杂度分析
-
时间复杂度:O(M * N),其中 M 是行数,N 是列数。在最坏情况下,所有格子都可能被访问一次。
-
空间复杂度:O(M * N),用于存储队列和处理访问状态,尤其当整个棋盘都是
'O'
时,队列可能存储整个棋盘。
总结
这个实现有效地解决了“被围绕的区域”问题,通过广度优先搜索(BFS)遍历所有与边界相连的 'O'
,并将其标记为安全区域。最终,该算法能够高效地将被围住的区域转变为 'X'
,而保证与边界相连的 'O'
区域保持不变。该算法非常适合处理类似的二维网格问题,通过 BFS 的方式可以灵活地处理不同的边界条件和连通性问题。
相关文章:
BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路
目录 一、733. 图像渲染 - 力扣(LeetCode) 算法代码: 算法思路 基础参数 函数入口 检查条件 初始化 BFS BFS 填充过程 返回结果 复杂度分析 总结 二、200. 岛屿数量 - 力扣(LeetCode) 算法代码:…...
8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改
文章目录 前言:SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建1.2 开发规范1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)1.2.2 开发规范-统一响应结果和异常处理1.2.3 开发流程2. 部门管理2.1 查询部门2.1.1 原型和需求…...
Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek
1 Ollama的安装及使用 1.1 什么是Ollama? Ollama 是一个用于本地部署和运行大型语言模型的框架。 Ollama 的作用包括: 本地模型运行:Ollama 允许在本地机器上运行大型语言模型(如 LLaMA、DeepSeek 等),无…...
深入解析MySQL索引:本质、分类、选择及使用原则
一、索引的本质 索引,作为数据库中的一种核心数据结构,其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”,它帮助数据库系统快速定位到需要查询的数据行,从而大大提高数据检索的速度…...
MYSQL的第一次
目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表? 创建invoices表?? ?查看建立的表 前情提要 需要下载mysql并进行配置,建议下载8.0.37,详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析…...
机器学习笔记——常用损失函数
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的损失函数和代价函数,各函数的使用场景。 热门专栏 机器学习 机器学习笔记合集 深度学习 深度学习笔记合集 文章目录 热门…...
谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交
安装配置 git 1 、下载 git : https://git-scm.com 下载git客户端,右键桌面Git GUI/bash Here。进入bash 2 、配置 git ,进入 git bash # 配置用户名 git config --global user.name "username" //(名字,随意写)# …...
51单片机学习——静态数码管显示
1. 数码管介绍 LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。 2. 数码管引脚定义 LED的阴极连接到一个端口上是共阴极连接,称为共阴极数码管。LED的阳极连接到一个端口上是共阳极连接&…...
Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
文章目录 实现思路示例代码代码解释主要功能和用法注意事项 在 Qt 5.9.9 的 C 开发中,使用 QTcpSocket 时,要判断是服务端主动断开 TCP Socket 连接,可以通过处理 QTcpSocket 的 disconnected 信号,结合 QTcpSocket 的状态以及…...
UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image
本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些协议分别描述了已加载到内存中的映像,并指定了PE/COFF映像通过EFI引导服务LoadImage()加载 时使用的设备路径。这些描述包括 load image 的源、映像在内存中的当前位置、为image分…...
Deepseek 与 ChatGPT:AI 浪潮中的双子星较量
引言 在人工智能飞速发展的当下,AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者,各自展现出独特的魅力,引领着 AI 技术的发展潮流。今天,就让我们深入探讨这两款模型,看看它们在 AI 领域中是…...
open-webui安装
docker安装openwebui 拉取镜像 docker pull ghcr.io/open-webui/open-webui:maindocker images启动 docker run -d -p 8346:8080 --name open-webui ghcr.io/open-webui/open-webui:maindocker ps查看端口占用 lsof -i:8346访问地址 http://ip:port http://127.0.0.1:8346...
docker 安装jenkins
使用docker 容器安装jenkins比较方便,但是细节比较重要,这里实战安装了一遍,可用: 拉取最新的jenkins镜像 docker pull jenkins/jenkins 如果没有翻墙的话,可以会有下面的报错: Error response from dae…...
前端利器:DateUtils 日期时间工具深度剖析
序言 在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils,它涵盖了从基础的日…...
Denoising Diffusion Restoration Models论文解读
论文要点 恢复的线性逆问题可以使用预训练的DDPM完成:1. 将降质矩阵使用SVD,得到分解矩阵;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多,比如后续的DDNM、…...
【Windows API】SetFilePointerEx函数用法介绍
目录 一、函数概述 二、函数原型与参数解析 1. hFile(文件句柄) 2. liDistanceToMove(移动距离) 3. lpNewFilePointer(新指针位置) 4. dwMoveMethod(移动基准点) 三、返回值与…...
uniapp uni.request重复请求处理
类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…...
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
Windows安装node.js详细教程
一、什么是node.js Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台,它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。 由 Rya…...
大模型领域常见的专业术语和关键词及简要解释
现在大语言模型非常火热,特别是deepseek,想要了解、学习、应用、设计开发大模型,则我们需要先知道大模型邻域都包含哪些方面,以及在大模型领域的各个方面,都有哪些常见的专业术语和关键词。 以下我们从大模型领域的模型架构、训练方法到优化技术、应用和伦理问题等多个方…...
单细胞转录组画小提琴VlnPlot只显示需要类型细胞
探序基因肿瘤研究院 整理 在R语言中,单细胞转录组数据画小提琴图中,我们如果想只展示出需要的特定细胞类型,可以把这需要展示的细胞类型单独构建成一个Seurat对象,再画图。 例如我们在Seurat对象中的meta.data表格中,…...
UE 播放视频
一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...
当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
当pcie设备变化时centos是否会修改网络设备的名称 在CentOS(以及其他基于Linux的操作系统)中,网络接口的命名通常遵循特定的规则,尤其是在使用PCIe设备(如网络适配器)时。网络接口的命名通常基于设备的物理…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
《养生》(二)
一、基础生活调整 1.作息规律 固定每天7-8小时睡眠,尽量22:30前入睡,晨起后拉开窗帘晒太阳5分钟,调节生物钟 2.饮食优化 三餐定时,每餐细嚼慢咽20次以上,优先吃蔬菜和蛋白质(如鸡蛋、豆腐&#x…...
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下,Space 名称中需要包含 MindSearch 关键词,请在必要的步骤以及成功的对话测试结果当中 实现过程如下: 2.1 MindSearch 简…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
Ansys Motor-CAD:热分析
您好,汽车迷: 在这篇博客中,我将讨论如何使用 Ansys Motor-CAD 中的热物理模型对 IPM 电机进行热分析。我展示了可以应用的各种冷却系统,并演示了一些计算方法,包括稳态、简单瞬态和占空比。 热物理和设置 选择热物理…...
Swagger 转 Word 技术方案
项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...
对CSS了解哪些?
CSS(Cascading Style Sheets,层叠样式表)是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围: 1. CSS 基础 选择器:如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...
【C语言】指针(5)
前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…...
go~为什么会有json.Number这种类型存在
解决 JSON 数值类型的不确定性 在 JSON 格式里,数值类型没有明确区分整数和浮点数,一个数值可能是整数(如 123),也可能是浮点数(如 123.45)。而在 Go 语言中,整数(如 in…...
Jmeter连接数据库、逻辑控制器、定时器
Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进来 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter 配置数据库连接信…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
20250220找回Ubuntu22.04中丢失的文件管理器
20250220找回Ubuntu22.04中丢失的文件管理器 2025/2/20 18:05 在Ubuntu20.04.6中 生产服务器上 强制安装deb安装包的时候,把 桌面显示搞丢了。 Ubuntu的桌面用得少,但是没有还是挺不方便的,一通操作,桌面回来了。还是有很多/不少功…...
IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
目录 什么叫以太网?它与因特网有何区别?公板实现以太网的原理介绍(MII/RMII协议介绍)公板的原理图下载地址公板中IMX6ULL处理器与MAC(以太网控制器)有关的原理图IMX6ULL处理器的MAC引脚说明1. **ENET1_TX_DATA0**2. **ENET1_TX_DATA1**3. **ENET1_TX_EN*…...
一周学会Flask3 Python Web开发-request请求对象与url传参
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息,我们可以从中获取所有数据。 request对象包含的常用属性&…...
2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略&…...
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
C# 十六进制字符串转换为十进制
在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法: 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
Qt 保留小数点 固定长度 QString 格式化
QString的arg()函数格式化输出double类型数值,包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符,以及字段宽度的影响。文中提到,当fieldWidth小于实际长度时,前面的填充不会被截断。此外&am…...
亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
作者:程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么,今天,给…...
AI训练中的常用指令
以下是一些常用于深度学习训练的 Linux 指令,可以帮助你高效管理和执行训练任务: 文件管理 查看当前目录内容:ls进入目录:cd 路径/到/目录创建新目录:mkdir 新目录名称删除文件或目录: 删除文件ÿ…...
汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%
汽车同轴供电(PoC)系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用,如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途,包括能量存储:电感器…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
强化学习笔记
强化学习的总体目标:寻找最优策略。 关键名词 智能体(Agent) 状态(State):智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间(State space):把所有状态放在一起&…...
【个人记录】openEuler安装K3S并配置为GPU节点
前言 国内网络环境特殊,在线安装比较麻烦,K3S采用离线安装方式进行部署。 安装整体思路是: 安装GPU驱动安装CUDA工具安装nvidia容器运行时安装K3S设置K3S使用GPU 基础环境 采用All In One方式(其实只有一张GPU卡)部…...
SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…...