当前位置: 首页 > news >正文

c++_csp-j算法 (1)

DFS搜索(深度优先搜索)

讲解

第一部分:DFS搜索算法简介

深度优先搜索(Depth-First Search,DFS)是一种常用的图搜索算法,用于遍历或搜索图或树的所有节点。DFS算法的核心思想是尽可能深地搜索图的分支,直到无法再深入为止,然后回溯到上一级节点,继续搜索其他分支。DFS算法是一种递归的搜索算法,也可以用栈来实现。在实际应用中,DFS算法常用于解决图的遍历、连通性、路径搜索等问题。

1. 基本思想

DFS算法的基本思想是从图中的某一节点出发,沿着一条路径一直走到底,直到无法继续为止,然后回溯到上一个节点,继续搜索其他路径,直到所有路径都被搜索完毕。在搜索的过程中,需要标记已经访问过的节点,避免重复访问,以防止陷入无限循环。

2. 递归实现

DFS算法的递归实现是一种直观且简单的方式。递归地访问节点的邻居节点,直到所有节点都被访问过为止。递归实现DFS的伪代码如下:

DFS(node):访问节点node将节点node标记为已访问for 每个邻居节点neighbor of node:if neighbor未被访问过:DFS(neighbor)

在递归实现中,需要一个标记数组来记录节点的访问状态,防止重复访问。递归实现的优点是简单直观,易于理解,但在处理大规模图或树时可能会出现栈溢出的问题。

3. 栈实现

为了避免递归实现中可能出现的栈溢出问题,可以使用栈来实现DFS算法。栈实现的DFS算法是一种非递归的方式,通过维护一个栈来模拟递归的过程。栈实现DFS的伪代码如下:

DFS(node):初始化一个栈s将起始节点node入栈将节点node标记为已访问while 栈s非空:弹出栈顶节点top访问节点topfor 每个邻居节点neighbor of top:if neighbor未被访问过:将neighbor入栈将neighbor标记为已访问

栈实现DFS算法的优点是可以避免递归调用的深度限制,适用于处理大规模图或树。栈实现的DFS算法通常使用一个栈来保存待访问的节点,一个标记数组来记录节点的访问状态。

4. 应用领域

DFS算法在许多领域都有着重要的应用,包括但不限于:

  • 图的遍历:DFS算法可以用来遍历图中的所有节点,查找连通分量等。
  • 路径搜索:DFS算法可以用来搜索图中的路径,如寻找从起始节点到目标节点的路径。
  • 拓扑排序:DFS算法可以用来实现拓扑排序,找出有向无环图的拓扑顺序。
  • 基因组序列分析:DFS算法可以用来在基因组序列中搜索特定的序列模式。

第二部分:图的表示

在计算机科学中,图是一种非常重要的数据结构,用于表示对象之间的关系。图由节点(顶点)和边组成,节点之间的边表示节点之间的关系。在图论中,图可以分为有向图和无向图,有向图中的边是有方向的,无向图中的边是没有方向的。

图的表示有多种方式,常见的包括邻接矩阵和邻接表。在邻接矩阵中,图的节点和边可以用二维矩阵表示,矩阵的行和列分别表示图中的节点,矩阵中的值表示节点之间的边。邻接矩阵适用于稠密图,但对于稀疏图来说可能会占用较多的内存空间。而邻接表是一种更为灵活的表示方式,适用于稀疏图。在邻接表中,每个节点对应一个链表,链表中存储了与该节点相邻的节点,通过链表的方式表示节点之间的关系。

邻接表的实现

在C++中,可以通过结构体和链表来实现邻接表表示图的数据结构。下面是一个简单的示例代码,展示了如何用邻接表表示图:

#include <iostream>
#include <vector>using namespace std;// 图的节点结构体
struct Node {int val;Node* next;Node(int v) : val(v), next(nullptr) {}
};// 邻接表表示图的数据结构
class Graph {
private:int V; // 图中节点的个数vector<Node*> adjList; // 邻接表public:Graph(int v) : V(v) {adjList.resize(V, nullptr);}// 添加边void addEdge(int src, int dest) {Node* newNode = new Node(dest);newNode->next = adjList[src];adjList[src] = newNode;// 无向图的话,需要添加反向边newNode = new Node(src);newNode->next = adjList[dest];adjList[dest] = newNode;}// 打印邻接表void printGraph() {for (int i = 0; i < V; i++) {Node* temp = adjList[i];cout << "顶点 " << i << " 的邻接表:";while (temp) {cout << " -> " << temp->val;temp = temp->next;}cout << endl;}}
};int main() {Graph graph(5);graph.addEdge(0, 1);graph.addEdge(0, 4);graph.addEdge(1, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 3);graph.addEdge(3, 4);graph.printGraph();return 0;
}

在上面的代码中,我们定义了一个Graph类来实现邻接表表示图的数据结构。通过addEdge函数可以添加边,通过printGraph函数可以打印邻接表。在main函数中,我们创建了一个包含5个节点的图,并添加了一些边,最后打印了邻接表。

深度优先搜索(DFS)算法

深度优先搜索(DFS)是一种用于图和树的遍历算法,通过尽可能深的搜索图的分支,直到无法继续为止,然后回溯到上一个节点,继续搜索下一个分支。DFS算法可以用递归或栈来实现。

在DFS算法中,我们需要一个辅助数组来标记节点是否被访问过,避免重复访问。下面是一个简单的示例代码,展示了如何用递归实现DFS算法:

#include <iostream>
#include <vector>using namespace std;class Graph {
private:int V;vector<Node*> adjList;public:Graph(int v) : V(v) {adjList.resize(V, nullptr);}void addEdge(int src, int dest) {Node* newNode = new Node(dest);newNode->next = adjList[src];adjList[src] = newNode;newNode = new Node(src);newNode->next = adjList[dest];adjList[dest] = newNode;}void printGraph() {for (int i = 0; i < V; i++) {Node* temp = adjList[i];cout << "顶点 " << i << " 的邻接表:";while (temp) {cout << " -> " << temp->val;temp = temp->next;}cout << endl;}}void DFSUtil(int v, vector<bool>& visited) {visited[v] = true;cout << v << " ";Node* temp = adjList[v];while (temp) {int adjNode = temp->val;if (!visited[adjNode]) {DFSUtil(adjNode, visited);}temp = temp->next;}}void DFS(int v) {vector<bool> visited(V, false);DFSUtil(v, visited);}
};int main() {Graph graph(5);graph.addEdge(0, 1);graph.addEdge(0, 4);graph.addEdge(1, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 3);graph.addEdge(3, 4);graph.printGraph();cout << "DFS遍历结果:";graph.DFS(0);return 0;
}

在上面的代码中,我们在Graph类中添加了DFS算法的实现。DFSUtil函数是DFS算法的递归辅助函数,用于实际的深度优先搜索过程。DFS函数是DFS算法的入口函数,用于启动DFS搜索。在main函数中,我们创建了一个包含5个节点的图,并添加了一些边,然后打印了邻接表,并通过DFS函数进行深度优先搜索。

第三部分:DFS搜索函数实现

在这一部分,我们将深入探讨深度优先搜索(DFS)算法的实现细节,包括如何在图的表示中实现DFS搜索函数,以及如何在实际应用中应用DFS算法解决问题。我们将讨论DFS搜索函数的实现,深入探讨递归和非递归两种实现方式,以及如何在DFS搜索中应用回溯和标记访问的技巧。让我们开始吧!

递归实现DFS搜索函数

递归是实现DFS搜索函数的一种常见方式,它简洁而直观。在递归实现DFS搜索函数时,我们需要一个辅助函数来递归地访问图中的节点,并标记已访问的节点,以避免重复访问。下面是一个简单的示例代码,展示了如何递归实现DFS搜索函数:

void DFSUtil(int v, vector<bool>& visited) {visited[v] = true;cout << v << " ";Node* temp = adjList[v];while (temp) {int adjNode = temp->val;if (!visited[adjNode]) {DFSUtil(adjNode, visited);}temp = temp->next;}
}void DFS(int v) {vector<bool> visited(V, false);DFSUtil(v, visited);
}

在上面的代码中,DFSUtil函数是DFS搜索的递归辅助函数,用于实际的深度优先搜索过程。在DFS函数中,我们首先创建一个大小为图中节点个数的visited数组,用于标记节点是否被访问过。然后调用DFSUtil函数开始深度优先搜索,从节点v开始遍历图。在DFSUtil函数中,我们首先标记节点v为已访问,并输出节点v的值。然后遍历节点v的邻接节点,如果邻接节点未被访问过,则递归调用DFSUtil函数继续深度优先搜索。

非递归实现DFS搜索函数

除了递归实现外,我们还可以用非递归的方式实现DFS搜索函数,通常使用栈来辅助实现。非递归实现DFS搜索函数可以避免递归调用的开销,适用于深度优先搜索较深的图。下面是一个简单的示例代码,展示了如何非递归实现DFS搜索函数:

void DFS(int v) {vector<bool> visited(V, false);stack<int> stack;stack.push(v);while (!stack.empty()) {v = stack.top();stack.pop();if (!visited[v]) {visited[v] = true;cout << v << " ";Node* temp = adjList[v];while (temp) {int adjNode = temp->val;if (!visited[adjNode]) {stack.push(adjNode);}temp = temp->next;}}}
}

在上面的代码中,我们使用了一个栈来辅助实现非递归的DFS搜索函数。首先创建一个visited数组和一个栈stack,将起始节点v入栈。然后在while循环中,从栈中弹出一个节点v,如果节点v未被访问过,则标记节点v为已访问,并输出节点v的值。然后遍历节点v的邻接节点,将未被访问过的邻接节点入栈,继续深度优先搜索。

DFS搜索函数的应用

DFS搜索函数在实际应用中有很多用途,包括解决图的遍历问题、寻找图中的路径、判断图的连通性、拓扑排序等。DFS算法还可以应用于解决迷宫问题、括号匹配问题、数独等各种算法问题。

一个常见的应用是判断图中是否存在路径,我们可以用DFS搜索函数来实现。下面是一个简单的示例代码,展示了如何用DFS搜索函数判断图中是否存在从节点v到节点w的路径:

bool hasPath(int v, int w) {vector<bool> visited(V, false);return hasPathUtil(v, w, visited);
}bool hasPathUtil(int v, int w, vector<bool>& visited) {if (v == w) {return true;}visited[v] = true;Node* temp = adjList[v];while (temp) {int adjNode = temp->val;if (!visited[adjNode] && hasPathUtil(adjNode, w, visited)) {return true;}temp = temp->next;}return false;
}

在上面的代码中,我们实现了一个hasPath函数来判断图中是否存在从节点v到节点w的路径。在hasPathUtil函数中,我们首先判断节点v和节点w是否相等,如果相等则表示存在路径,直接返回true。然后标记节点v为已访问,并遍历节点v的邻接节点,递归地判断邻接节点是否存在路径到节点w。如果找到路径则返回true,否则返回false。

例题(1)

P1331 海战

P1331 海战 - 洛谷

# P1331 海战

## 题目背景

在峰会期间,武装部队得处于高度戒备。警察将监视每一条大街,军队将保卫建筑物,领空将布满了 F-2003 飞机。

此外,巡洋船只和舰队将被派去保护海岸线。不幸的是,因为种种原因,国防海军部仅有很少的几位军官能指挥大型海战。因此,他们培养了一些新海军指挥官。军官们选择了“海战”游戏来帮助他们学习。

## 题目描述

在一个方形的盘上,放置了固定数量和形状的船只,每只船却不能碰到其它的船。在本题中,我们认为船是方形的,所有的船只都是由图形组成的方形。

求出该棋盘上放置的船只的总数。

## 输入格式

第一行为两个整数 $R$ 和 $C$,用空格隔开,分别表示游戏棋盘的行数和列数。

接下来 $R$ 行,每行 $C$ 个字符,为 `#` 或 `.`。`#` 表示船只的一部分,`.` 表示水。

## 输出格式

一行一个字符串,如果船的位置放得正确(即棋盘上只存在相互之间不能接触的方形,如果两个 `#` 号上下相邻或左右相邻却分属两艘不同的船只,则称这两艘船相互接触了)。就输出 `There are S ships.`,$S$ 表示船只的数量。否则输出 `Bad placement.`。

## 输入输出样例 #1

### 输入 #1

```
6 8
.....#.#
##.....#
##.....#
.......#
#......#
#..#...#
```

### 输出 #1

```
There are 5 ships.
```

## 说明/提示

对于 $100\%$ 的数据,$1 \le R,C \le 1000$。

代码

#include<bits/stdc++.h>
using namespace std;
int m,n,f[1005][1005],s,b[1005][1005],pd,lll;
int xx,dd,xb,db;
char a[1005][1005];
int bx[4]={0,0,-1,1};
int by[4]={-1,1,0,0};
void dfs(int x,int y){if(x<1||x>n||y<1||y>m||f[x][y]==1||a[x][y]!='#')return ;else{a[x][y]='@';f[x][y]=1;if(x>xx)xx=x;if(y>dd)dd=y;if(x<xb)xb=x;if(y<db)db=y;for(int i=0; i<4; i++)dfs(x+bx[i],y+by[i]);}return ;
}
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++)for(int j=1; j<=m; j++)cin>>a[i][j];
for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){if(a[i][j]=='#'){xx=-1,dd=-1,xb=2100000,db=2100000;dfs(i,j);for(int k=xb; k<=xx; k++){for(int l=db; l<=dd; l++){if(a[k][l]=='.')pd=1,s=-1;a[k][l]='.';}}if(pd==0)s++;}}
}
if(s!=-1)cout<<"There are "<<s<<" ships.";
else cout<<"Bad placement.";
return 0;
}

例题(2)

P1219 [USACO1.5] 八皇后 Checker Challenge

P1219 [USACO1.5] 八皇后 Checker Challenge - 洛谷

# P1219 [USACO1.5] 八皇后 Checker Challenge

## 题目描述

一个如下的 $6 \times 6$ 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。

![](https://cdn.luogu.com.cn/upload/image_hosting/3h71x0yf.png)

上面的布局可以用序列 $2\ 4\ 6\ 1\ 3\ 5$ 来描述,第 $i$ 个数字表示在第 $i$ 行的相应位置有一个棋子,如下:

行号 $1\ 2\ 3\ 4\ 5\ 6$

列号 $2\ 4\ 6\ 1\ 3\ 5$

这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。  
并把它们以上面的序列方法输出,解按字典顺序排列。  
请输出前 $3$ 个解。最后一行是解的总个数。

## 输入格式

一行一个正整数 $n$,表示棋盘是 $n \times n$ 大小的。

## 输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

## 输入输出样例 #1

### 输入 #1

```
6
```

### 输出 #1

```
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
```

## 说明/提示

【数据范围】  
对于 $100\%$ 的数据,$6 \le n \le 13$。

题目翻译来自NOCOW。

USACO Training Section 1.5

相关文章:

c++_csp-j算法 (1)

DFS搜索(深度优先搜索) 讲解 第一部分&#xff1a;DFS搜索算法简介 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种常用的图搜索算法&#xff0c;用于遍历或搜索图或树的所有节点。DFS算法的核心思想是尽可能深地搜索图的分支&#xff0c;直…...

word选中所有的表格——宏

Sub 选中所有表格()Dim aTable As TableApplication.ScreenUpdating FalseActiveDocument.DeleteAllEditableRanges wdEditorEveryoneFor Each aTable In ActiveDocument.TablesaTable.Range.Editors.Add wdEditorEveryoneNextActiveDocument.SelectAllEditableRanges wdEdito…...

16、堆基础知识点和priority_queue的模拟实现

一、priority_queue的使用方法 priority_queue的使用方法看这篇文章 二、堆 1、介绍 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树数据结构&#xff0c;满足以下性质&#xff1a; 堆序性质&#xff08;Heap Property&#xff09;&#xff1a; 大顶堆&#xff08…...

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤

20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤 2025/4/19 15:38 查询格式YUV/RGB 81 09 04 24 60 FF 90 50 00 00 FF 查询辨率帧率 81 09 04 24 72 FF 90 50 01 03 FF 查询LVDS mode : Singel output/Dual output 81 09 04 24 74 FF 90 50 00 00 FF 配置405的机…...

【信息系统项目管理师】高分论文:论信息系统项目的采购管理(信息化办公系统)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划采购管理2、实施采购3、管理采购论文 随着信息化技术的发展,从企业到政府,传统的办公模式正在悄然消失,信息化办公模式正成为主流。特别是国务院印发的《关于加快推广“互联网+政务服务”工作的…...

国产GPU生态现状评估:从寒武纪到壁仞的编程适配挑战

近年来&#xff0c;国产GPU厂商在硬件性能上持续突破&#xff0c;但软件生态的构建仍面临严峻挑战。本文以寒武纪、壁仞等代表性企业为例&#xff0c;对比分析其与CUDA生态的兼容性差异&#xff0c;并探讨技术突围路径。 一、编程适配的核心挑战 ‌编程模型差异与开发成本‌ …...

Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!

1.创建环境选择torch2.0&#xff0c; cuda11.8&#xff0c;python3.8 2.从GitHub官网下载cp38对应的&#xff0c;causl_conv1d&#xff0c;和mamba-ssm2.2.2。下载入下图所示。 3.直接用finalshell 或者xshell连接服务器上传&#xff0c;到根目录下面。 直接用pip install *…...

手搓LeNet-5(基础模型)实现交通标志识别

手搓LeNet-5&#xff08;基础模型&#xff09;实现交通标志识别 一、环境准备1. 安装Python环境2. 安装CUDA&#xff08;可选&#xff0c;仅需GPU加速时&#xff09;3. 配置虚拟环境4. 安装PyTorch核心库5. 安装辅助库6. 验证安装7. 准备数据集8.常见问题处理 二、 数据集处理三…...

TV主板的拆解学习

下面是小米的电视机主板&#xff0c;电源采用PFCLLC方案&#xff0c;主控采用电视盒子主控采用晶晨半导体T962-H&#xff0c;搭配2G南亚DDR3L内存和8G三星eMMC存储器。 本文用来加深对TV主板的认识&#xff0c;学习于充电头网&#xff0c;链接在文末。 两颗蓝色插件Y电容来自S…...

PH热榜 | 2025-04-19

1. Omakase.ai Voice 标语&#xff1a;你的语音驱动销售助手。一个链接。 介绍&#xff1a;Omakase.ai Voice将您的网站转变为一个语音驱动的销售助手&#xff0c;它可以在客户浏览时进行对话、倾听并给出推荐。聊天机器人往往效果不佳——它们无法实现销售&#xff0c;而这个…...

LeetCode(Hot.2)—— 49.字符异位词分组题解

Problem: 49. 字母异位词分组 字母异位词的定义是&#xff1a;两个单词的字母组成一样&#xff0c;但顺序可以不同&#xff0c;比如 eat、tea 和 ate 就是一个组的。 思路 将每个字符串按字母排序&#xff0c;把排序后的字符串作为 key&#xff0c;相同 key 的放在一个 list 中…...

UE学习记录part19

231 insect: insect enemy type 创建dead动画资源 往insect head上添加socket 创建攻击root motion动画。motion warping需要与root motion合作使用 为buff_blue创建物理资产 设置simulate physic使sinsect死亡后能落到地板上而不是漂浮在空中&#xff0c;要将die函数设置为 -…...

不连续数据区间天数累计sql

计算不连续数据区间天数并且剔除重复天数 create table loan_data(loan_no varchar(10),cust_no varchar(10),start_date date,end_date date )INSERT INTO loan_data VALUES (LN001, CUST001, 2025-01-04, 2025-01-08); INSERT INTO loan_data VALUES (LN002, CUST001, 2025-…...

django基于爬虫的网络新闻分析系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本网络新闻分析系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Python进行编写&#xff0c;使用了Django框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。前台主要功能包括&#xff1a;用户注册、登录、浏览…...

JAVA文件I/O

目录 一、三种路径的分类&#xff1a; 1、绝对路径&#xff1a; 2、相对路径&#xff1a; 3、基准目录&#xff1a; 二、文件的种类&#xff1a; 三、利用JAVA操作文件&#xff1a; 1、File类的构造方法&#xff1a; 2、File 类方法的使用&#xff1a; 使用例子&#…...

第七周作业

一、分别在前端和后端使用联合注入实现“库名-表名-字段名-数据”的注入过程&#xff0c;写清楚注入步骤 1、爆库 后端sql语句&#xff1a;select database(); 前端&#xff1a;1 order by 1#&#xff0c;1 order by 2#&#xff0c;1 order by 3# 判断显示位为两位1 union sel…...

Linux 进程信号详解

进程信号 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。 kill -l //查看不同信号代表的事件 执行kill -l 可以看到共有62种信号&#xff0c;其中&#xff1a; 0-31号信号为非可靠信号&#xff08;这部分信号借鉴于UNIX系统的信号&#xff09;&#xff1b;…...

MCP 应用案例-网络设备批量管理

案例背景 需求痛点 企业需管理数百台跨地域网络设备&#xff08;交换机/路由器&#xff09;&#xff0c;传统方式存在&#xff1a; 人工SSH登录效率低脚本维护成本高&#xff08;不同厂商CLI语法差异&#xff09;状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…...

进程程序替换

fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢&#xff1f;进程的程序 替换来完成这个功能&#xff01; 程序替换是通过特定的接⼝&#xff0c;加载磁盘上的⼀个全新的程序(代码和数据)&#xff0c;加载到调⽤进程的地址空间中&#xff01…...

6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南

ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南 关键词:定时任务调度, ChatGPT 代码生成, Cron 脚本开发, Python 调度器, 自动化更新系统 6.3 使用 ChatGPT 生成 Cron 调度脚本 在 GitHub Sentinel 的定期更新功能中,定时任务调度是核心模块。本节演示如何通过…...

废物九重境弱者学JS第十四天--构造函数以及常用的方法

目录 JavaScript 进阶 - 第2天 深入对象 构造函数 实例成员 静态成员 内置构造函数 Object Array 包装类型 String Number 案例 JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c…...

机器学习+深度学习

文章目录 一、机器学习(一)机器学习概念(二)机器学习基本流程(三)机器学习应用场景二、机器学习的常见工具与相关库(一)Python 机器学习库(二)数据处理库(三)可视化库三、聚类算法思想与模型搭建过程(一)K - Means 聚类算法(二)DBSCAN 聚类算法四、分类算法思想…...

docker基本使用命令

一、镜像 1、拉取镜像 docker pull busybox docker pull nginx:1.26-alpine 2、查看本地镜像 [rootRocky-1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4e1b6bae1e48 18 hours ago 192MB busybox lates…...

相机模型--CMOS和CCD的区别

1--CMOS和CCD的工作原理 CCD&#xff08;Charge Coupled Device&#xff0c;电荷耦合器件&#xff09;&#xff1a; 1. 图像通过光电效应在感光单元中转化为电荷&#xff1b; 2. 每个像素上的电荷被依次“耦合”并传输到芯片的角落&#xff0c;通过一个或几个模拟输出放大器输…...

触发器(详解)

一&#xff1a;MySQL触发器 MySQL数据库中触发器是一个特殊的存储过程。 不同的是执行存储过程要使用 CALL 语句来调用&#xff0c;而触发器的执行不需要使用 CALL 语句来调用&#xff0c;也不需要手工启动&#xff0c;只要一个预定义的事件发生就会被 MySQL自动调用。 引发…...

Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据

Vue 3 中使用 ref 创建的响应式对象数据转换为普通&#xff08;非响应式&#xff09;的数据&#xff0c;有以下几种方法&#xff1a; 1. 访问 .value 属性: 这是最直接、最常见的方法。 由于 ref 对象的值存储在其 .value 属性中&#xff0c;直接访问该属性即可获得普通数据。…...

Vue基础(6)_键盘事件

普通键盘事件 键盘事件常用的有两个&#xff1a;keydown、keyup。 举例&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><script type"text/javascript" src"../js/vue.js"&…...

Kubernetes控制平面组件:高可用 APIServer

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

这个是我的qss按钮样式 和之前的// 应用全局样式表 QString style = R“(是会冲突吗,导致我的按钮背景颜色是黑色,我该怎么修改

/* 样式 A */ *[style-type="A"] { background-color:#cfd1d4; border: none; border-radius: 50%; /* 圆形边框 */ padding: 7px 14px; } *[style-type="A"]:hover { background-color: #45a049; }这个是我的qss按钮样式 和之前的// 应用全局样式表 QStri…...

Kubernetes控制平面组件:API Server详解(二)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

人工智能在智慧农业中的应用:从田间到餐桌的变革

农业是人类社会的基石&#xff0c;随着全球人口的增长和资源的日益紧张&#xff0c;传统农业面临着巨大的挑战。近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展为农业带来了新的机遇。智慧农业通过将AI技术与农业生产相结合&#xff0c;实现了从田间种植…...

多人3D游戏完整实现方案

以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…...

FFUF指南

ffuf 的核心功能&#xff1a; 目录/文件发现&#xff1a; 通过暴力破解&#xff08;使用字典&#xff09;探测目标网站的隐藏目录或文件&#xff0c;例如&#xff1a; ffuf -w /path/to/wordlist.txt -u http://target.com/FUZZ 子域名枚举&#xff1a; 通过模糊测试发现目标…...

详细的PyCharm安装教程

详细的PyCharm安装教程 安装前准备 确认系统要求&#xff1a; Windows&#xff1a;Microsoft Windows 10 1809 64位或更高版本&#xff0c;Windows Server 2019 64位或更高版本。 macOS&#xff1a;12.0或更高版本。 Linux&#xff1a;满足以下要求的两个最新版本的Ubuntu LTS或…...

FPGA IO引脚 K7-认知4

UG475来知道bank, GTX, Pin数量&#xff0c; Package, Pinout 时钟 ​​SRCC​​&#xff08;Single-Region Clock Capable I/O&#xff09;和​​MRCC​​&#xff08;Multi-Region Clock Capable I/O&#xff09;是专用的时钟输入/输出引脚。 如 2.DQS...

C++——异常

1. C语言错误处理机制 我们在曾经介绍过C语言下的错误码。错误码我们过去经常见到&#xff0c;错误码通常是指errno变量中的值&#xff0c;它表示特定操作&#xff08;如系统调用或库函数&#xff09;发生错误的原因。errno是一个全局变量&#xff0c;当出现错误时会自动将错误…...

vue3 中 iframe 多页面切换导致资源刷新的问题解决

最近发现一个问题&#xff0c;我在使用 websocket 的时候&#xff0c;在主页面进行了 websocket 连接了之后&#xff0c;再使用 iframe 打开子页面的时候&#xff0c;通常会触发页面刷新&#xff0c;这样就导致 WebSocket 断开&#xff0c;这是因为切换 src 会重新加载 iframe …...

php多种方法实现xss过滤

1. 使用 htmlspecialchars() 函数 htmlspecialchars() 是一个PHP内置函数&#xff0c;用于将特殊字符转换为HTML实体&#xff0c;从而防止浏览器将其解释为HTML或脚本代码。 <?phpfunction sanitizeInput($input) {// 将特殊字符转换为HTML实体return htmlspecialchars($…...

蓝桥杯练习题2

动态规划 动态规划三大题型&#xff1a;计数问题、最值问题、存在性问题&#xff1b; 【最小权值】-- 最值问题 【题目分析】 import java.util.Arrays; Arrays类中的一个方法&#xff1a;Arrays.fill(int[] m,int n) //给 int 类型(或者char类型/Long类型...)的数组全部空间…...

Python遥感开发之Hurst指数的实现

Python遥感开发之Hurst指数的实现 主要讲解Python实现Hurst指数&#xff0c;实现遥感下的Hurst指数&#xff0c;对Hurst指数进行分类&#xff0c;以及结合slope指数实现对未来变化趋势的分析。 文章目录 Python遥感开发之Hurst指数的实现0 什么是Hurst指数1 Python实现Hurst指…...

opencv 给图片和视频添加水印

给图片和视频添加水印 1 给图片添加水印2 给视频添加水印 1 给图片添加水印 代码如下&#xff1a; 添加水印 imgcv2.imread(r../15day4.10/src/xiaoren.png) img2cv2.imread(r../15day4.10/src/bg.png) h,w,cimg.shapeRIO_img2img2[100:100h,200:200w]img3cv2.cvtColor(img,…...

国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)

文章目录 一、B接口协议图像数据上报通知接口介绍B.13.1 接口描述B.13.2 接口流程B.13.3 接口参数B.13.3.1 SIP头字段B.13.3.2 SIP响应码B.13.3.3 XML Schema参数定义 B.13.4 消息示例B.13.4.1 图像数据上报请求B.13.4.2 图像数据上报响应 二、B接口图像数据上报通知失败常见问…...

Redis(持久化)

目录 一 Redis持久化的方式 1. RDB(Redis Database) 2. AOF(Append Only File) 二 对比RDB/AOF 为什么要持久化 Redis是跑在内存上的&#xff0c;但内存上的数据是临时的&#xff0c;Redis服务挂了&#xff0c;数据也就丢失了&#xff0c;所以为了解决上述问题&#xff0c;R…...

Linux系统中的网络管理

1.RHEL9版本中&#xff0c;使用nm进行网络配置&#xff0c;ifcfg不再是网络配置文件的主存储&#xff0c;样式仍然可用&#xff0c;但它不再是NetworkManger存储新网络配置文件的默认位置&#xff0c;RHEL以key-file格式在etc/NetworkManger/system-connections/中存储新的网络…...

【深度学习—李宏毅教程笔记】Transformer

目录 一、序列到序列&#xff08;Seq2Seq&#xff09;模型 1、Seq2Seq基本原理 2、Seq2Seq模型的应用 3、Seq2Seq模型还能做什么&#xff1f; 二、Encoder 三、Decoder 1、Decoder 的输入与输出 2、Decoder 的结构 3、Non-autoregressive Decoder 四、Encoder 和 De…...

关于UE5的抗锯齿和TAA

关于闪烁和不稳定现象的详细解释 当您关闭抗锯齿技术时&#xff0c;场景中会出现严重的闪烁和不稳定现象&#xff0c;尤其在有细节纹理和小物体的场景中。这种现象的技术原因如下&#xff1a; 像素采样问题 在3D渲染中&#xff0c;每个像素只能表示一个颜色值&#xff0c;但…...

交换网络基础

学习目标 掌握交换机的基本工作原理 掌握交换机的基本配置 交换机的基本工作原理 交换机是局域网&#xff08;LAN&#xff09;中实现数据高效转发的核心设备&#xff0c;工作在 数据链路层&#xff08;OSI 模型第二层&#xff09;&#xff0c;其基本工作原理可概括为 “学习…...

AUTOSAR图解==>AUTOSAR_SWS_EFXLibrary

AUTOSAR 扩展定点数学函数库(EFX)分析 1. 概述 AUTOSAR (AUTomotive Open System ARchitecture) 是汽车电子控制单元(ECU)软件架构的开放标准。在AUTOSAR架构中&#xff0c;扩展定点数学函数库(Extended Fixed-point library, EFX)提供了一组优化的定点数学运算函数&#xff…...

六边形棋盘格(Hexagonal Grids)的坐标

1. 二位坐标转六边形棋盘的方式 1-1这是“波动式”的 这种就是把【方格子坐标】“左右各错开半个格子”做到的 具体来说有如下几种情况 具体到庙算平台上&#xff0c;是很巧妙的用一个4位整数&#xff0c;前两位为x、后两位为y来进行表示 附上计算距离的代码 def get_hex_di…...

李宏毅NLP-5-RNNTNeural TransducerMoChA

RNN Transducer(RNN-T) 循环神经对齐器&#xff08;RNA&#xff0c;Recurrent Neural Aligner&#xff09;对CTC解码器的改进&#xff0c;具体内容如下&#xff1a; “RNA”&#xff0c;全称 “Recurrent Neural Aligner”&#xff0c;引用来自 [Sak, et al., INTERSPEECH’17…...