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

【C++】多源BFS问题和拓扑排序

目录

多源BFS介绍

单源BFS和多源BFS的区别

SO如何解决多源BFS问题

多源之核心

矩阵

算法思路

代码实现

飞地的数量

算法思路

代码实现

地图中的最高点

算法思路

代码实现

地图分析

算法思路

代码实现

拓扑排序介绍

有向无环图

​编辑

如何解决这类问题

课程表

算法思路

代码实现

课程表2

算法思路

代码实现

火星词典

代码实现


多源BFS介绍

单源BFS和多源BFS的区别

顾名思义,单源BFS是只有一个起点,博客CSDN中已经阐述过,如有不明白者,可前去一探究竟,而多源BFS是有多个起点,然后同时出发,到达终点;

SO如何解决多源BFS问题

多源的BFS,本质上与单源的BFS并无太大差别,我们只需要把多个起点等效成一个起点即可,这样就转化为了单源的问题了。

多源之核心

将所有的起点都加入队列---->扩散----->终点。与单源之秘法极其类似,方能解之。

矩阵

例题地址. - 力扣(LeetCode)

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。

示例 1:

输入:mat = [[0,0,0],[0,1,0],[0,0,0]]
输出:[[0,0,0],[0,1,0],[0,0,0]]

示例 2:

输入:mat = [[0,0,0],[0,1,0],[1,1,1]]
输出:[[0,0,0],[0,1,0],[1,2,1]]

算法思路

对于求的最终结果,我们有两种⽅式:
第⼀种⽅式:从每⼀个 1 开始,然后通过层序遍历找到离它最近的 0
这⼀种⽅式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。并且如果
矩阵中只有⼀个 0 的话,每⼀次层序遍历都要遍历很多层,时间复杂度较⾼。
换⼀种⽅式:从 0 开始层序遍历,并且记录遍历的层数。当第⼀次碰到 1 的时候,当前的层数
就是这个 1 0 的最短距离。
这⼀种⽅式,我们在遍历的时候标记⼀下处理过的 1 ,能够做到只⽤遍历整个矩阵⼀次,就能得
到最终结果。
但是,这⾥有⼀个问题, 0 是有很多个的,我们怎么才能保证遇到的 1 距离这⼀个 0 是最近呢?
其实很简单,我们可以先把所有的 0 都放在队列中,把它们当成⼀个整体,每次把当前队列⾥⾯的所 有元素向外扩展⼀次。

代码实现

class Solution {
public:int m,n;int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {m=mat.size();n=mat[0].size();vector<vector<int>>ans(m,vector<int>(n,-1));queue<pair<int,int>>q;//储存所有的原点for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(mat[i][j]==0){q.push({i,j});ans[i][j]=0;}}}int ret=0;while(q.size()){ret++;int sz=q.size();while(sz--){auto [a,b]=q.front();q.pop();for(int i=0;i<4;i++){int x=a+dx[i];int y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&ans[x][y]==-1){ans[x][y]=ret;q.push({x,y});}}}}return ans;}
};

飞地的数量

例题地址:. - 力扣(LeetCode)

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。

一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。

返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

示例 1:

输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释:有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。

示例 2:

输入:grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:所有 1 都在边界上或可以到达边界。

算法思路

正难则反:
从边上的 1 开始搜索,把与边上 1 相连的联通区域全部标记⼀下;
然后再遍历⼀遍矩阵,看看哪些位置的 1 没有被标记即可
标记的时候,可以⽤「多源 bfs 」。

代码实现

class Solution {
public:int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int numEnclaves(vector<vector<int>>& grid) {int m=grid.size();int n=grid[0].size();bool vis[m][n];memset(vis,0,sizeof vis);queue<pair<int,int>>q;//储存原点for(int i=0;i<m;i++){for(int j=0;j<n;j++){if((i==0||i==m-1||j==0||j==n-1)){if(grid[i][j]==1){q.push({i,j});vis[i][j]=true;}}}}while(q.size()){auto [a,b]=q.front();q.pop();for(int i=0;i<4;i++){int x=a+dx[i];int y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&!vis[x][y]){q.push({x,y});vis[x][y]=true;}                        }}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++;return ret;}
};

地图中的最高点

地址:. - 力扣(LeetCode)

给你一个大小为 m x n 的整数矩阵 isWater ,它代表了一个由 陆地 和 水域 单元格组成的地图。

  • 如果 isWater[i][j] == 0 ,格子 (i, j) 是一个 陆地 格子。
  • 如果 isWater[i][j] == 1 ,格子 (i, j) 是一个 水域 格子。

你需要按照如下规则给每个单元格安排高度:

  • 每个格子的高度都必须是非负的。
  • 如果一个格子是 水域 ,那么它的高度必须为 0 。
  • 任意相邻的格子高度差 至多 为 1 。当两个格子在正东、南、西、北方向上相互紧挨着,就称它们为相邻的格子。(也就是说它们有一条公共边)

找到一种安排高度的方案,使得矩阵中的最高高度值 最大 。

请你返回一个大小为 m x n 的整数矩阵 height ,其中 height[i][j] 是格子 (i, j) 的高度。如果有多种解法,请返回 任意一个 。

示例 1:

输入:isWater = [[0,1],[0,0]]
输出:[[1,0],[2,1]]
解释:上图展示了给各个格子安排的高度。
蓝色格子是水域格,绿色格子是陆地格。

示例 2:

输入:isWater = [[0,0,1],[1,0,0],[0,0,0]]
输出:[[1,1,0],[0,1,1],[1,2,2]]
解释:所有安排方案中,最高可行高度为 2 。
任意安排方案中,只要最高高度为 2 且符合上述规则的,都为可行方案

算法思路

代码实现

class Solution {
public:int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int numEnclaves(vector<vector<int>>& grid) {int m=grid.size();int n=grid[0].size();bool vis[m][n];memset(vis,0,sizeof vis);queue<pair<int,int>>q;//储存原点for(int i=0;i<m;i++){for(int j=0;j<n;j++){if((i==0||i==m-1||j==0||j==n-1)){if(grid[i][j]==1){q.push({i,j});vis[i][j]=true;}}}}while(q.size()){auto [a,b]=q.front();q.pop();for(int i=0;i<4;i++){int x=a+dx[i];int y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&!vis[x][y]){q.push({x,y});vis[x][y]=true;}                        }}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++;return ret;}
};

地图分析

地址:. - 力扣(LeetCode)

你现在手里有一份大小为 n x n 的 网格 grid,上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地。

请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回 -1

我们这里说的距离是「曼哈顿距离」( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个单元格之间的距离是 |x0 - x1| + |y0 - y1| 。

示例 1:

输入:grid = [[1,0,1],[0,0,0],[1,0,1]]
输出:2
解释: 
海洋单元格 (1, 1) 和所有陆地单元格之间的距离都达到最大,最大距离为 2。

示例 2:

输入:grid = [[1,0,0],[0,0,0],[0,0,0]]
输出:4
解释: 
海洋单元格 (2, 2) 和所有陆地单元格之间的距离都达到最大,最大距离为 4。

算法思路

代码实现

class Solution {
public:int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};int maxDistance(vector<vector<int>>& grid) {int m=grid.size();int n=grid[0].size();vector<vector<bool>>vis(m,vector<bool>(n));//标记数组//将所有的1作为起点queue<pair<int,int>>q;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]==1){q.push({i,j});}}}int ret=0;if(q.size()==n*n||q.size()==0)retur n -1;while(q.size()){ret++;int sz=q.size();while(sz--){auto [a,b]=q.front();q.pop();for(int i=0;i<4;i++){int x=a+dx[i];int y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==0&&!vis[x][y]){q.push({x,y});vis[x][y]=true;}}}}return ret-1;}
};

拓扑排序介绍

有向无环图

入度:指向活动节点的箭头个数;
出度:从活动节点出去指向别的节点的箭头个数。

通过入度和出入我们可以判断活动的进行顺序,活动度数为0的活动先进行没进行完后,将该活动的出度清空,下一个入度为0的节点就是该节点之后要进行的活动,以此类推,直到最后没有活动节点,如果只存在有一个入度的节点(成环)。

如何解决这类问题

1.首先建图,也就是邻接矩阵,可以使用哈希表处理。
2.统计所有活动节点的出度和入度。
3.如果入度是0就把活动节点加入到队列中。
4.BFS每走一步就把该节点的出度清空,将下一个入度为0的节点加入队列中。
5.判断是否有环:遍历度数表,如果还存在度数不为0的活动节点,那么说明还有活动成环了; 

课程表

地址:. - 力扣(LeetCode)

你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。

在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其  中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程  bi 。

  • 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。

请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。

示例 1:

输入:numCourses = 2, prerequisites = [[1,0]]
输出:true
解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0 。这是可能的。

示例 2:

输入:numCourses = 2, prerequisites = [[1,0],[0,1]]
输出:false
解释:总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0 ;并且学习课程 0 之前,你还应先完成课程 1 。这是不可能的。

算法思路

a. 将所有⼊度为 0 的点加⼊到队列中;
b. 当队列不空的时候,⼀直循环:
i. 取出队头元素;
ii. 将于队头元素相连的顶点的⼊度 - 1;
iii. 然后判断是否减成 0,。如果减成 0,就加⼊到队列中。

代码实现

class Solution {
public:bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {//首先构造邻接矩阵,也就是边int n=numCourses;unordered_map<int,vector<int>>edge;//储存每一个节点的入度//先把所有的节点放在了数组中vector<int>in(n);//后面要统计所有课程的度数是否为零//储存所有的边for(auto &x:prerequisites){int a=x[0];//最红的课程(终点)int b=x[1];//先学的课程(起点)//存进数组中edge[b].push_back(a);in[a]++;//对应节点的入度增加}//开始使用队列来处理无度数的节点queue<int>q;for(int i=0;i<n;i++)if(in[i]==0)q.push(i);//如果入度为零,就加入到队列while(q.size()){//取出无度数的节点auto tmp=q.front();q.pop();//然后取消所有与他有关的边for(auto& x: edge[tmp]){in[x]--;//是否要加入后面的课程if(in[x]==0)//如果没有度数了{q.push(x);}}}//判断是否有环for(auto i:in){if(i)//如果存在度数不为0的节点return false;}return true;}
};

课程表2

地址:. - 力扣(LeetCode)

现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。

  • 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。

返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组 。

示例 1:

输入:numCourses = 2, prerequisites = [[1,0]]
输出:[0,1]
解释:总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。

示例 2:

输入:numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]]
输出:[0,2,1,3]
解释:总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3]

示例 3:

输入:numCourses = 1, prerequisites = []
输出:[0]

算法思路

与上一道题一样。

代码实现

class Solution {
public:vector<int> findOrder(int n, vector<vector<int>>& p) {unordered_map<int,vector<int>>edge;//储存所有的节点vector<int>in(n);//统计所有节点的度数//建图for(auto &e:p){int a=e[0];//终点int b=e[1];//起点edge[b].push_back(a);in[a]++;//终点的入度数增加}//DFSqueue<int>q;for(int i=0;i<n;i++)if(in[i]==0)q.push(i);//储存所有的入度为零的节点.//储存结果的数组vector<int>ret;while(q.size()){auto t=q.front();q.pop();ret.push_back(t);for(auto x:edge[t])//遍历节点后的链接的节点{in[x]--;if(in[x]==0){q.push(x);}}}//判断是否有环for(auto x:in)if(x)return {};return ret;}
};

火星词典

地址:. - 力扣(LeetCode)

现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。

给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。

请你根据该词典还原出此语言中已知的字母顺序,并 按字母递增顺序 排列。若不存在合法字母顺序,返回 "" 。若存在多种可能的合法字母顺序,返回其中 任意一种 顺序即可。

字符串 s 字典顺序小于 字符串 t 有两种情况:

  • 在第一个不同字母处,如果 s 中的字母在这门外星语言的字母顺序中位于 t 中字母之前,那么 s 的字典顺序小于 t 。
  • 如果前面 min(s.length, t.length) 字母都相同,那么 s.length < t.length 时,s 的字典顺序也小于 t 。

示例 1:

输入:words = ["wrt","wrf","er","ett","rftt"]
输出:"wertf"

示例 2:

输入:words = ["z","x"]
输出:"zx"

示例 3:

输入:words = ["z","x","z"]
输出:""
解释:不存在合法字母顺序,因此返回 "" 。

代码实现

class Solution {
public:unordered_map<char,unordered_set<char>>edge;unordered_map<char,int>in;string alienOrder(vector<string>& words) {for(auto &str:words){for(auto x:str){in[x]=0;}}int n=words.size();for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){bool tmp=add(words[i],words[j]);if(tmp==true)return "";}queue<char>q;for(auto [a,b]:in){if(b==0)q.push(a);}string ret;while(q.size()){auto t=q.front();q.pop();ret+=t;for(auto x:edge[t]){if(--in[x]==0)q.push(x);}}for(auto [a,b]:in)if(b)return "";return ret;}bool add(string & s1,string&s2){int n=min(s1.size(),s2.size());int i=0;for(;i<n;i++){if(s1[i]!=s2[i]){char a=s1[i];char b=s2[i];if(!edge.count(a)||!edge[a].count(b)){edge[a].insert(b);in[b]++;}break;}}if(i==s2.size()&&i<s1.size())return true; return false;}
};

相关文章:

【C++】多源BFS问题和拓扑排序

目录 多源BFS介绍 单源BFS和多源BFS的区别 SO如何解决多源BFS问题 多源之核心 矩阵 算法思路 代码实现 飞地的数量 算法思路 代码实现 地图中的最高点 算法思路 代码实现 地图分析 算法思路 代码实现 拓扑排序介绍 有向无环图 ​编辑 如何解决这类问题 课…...

CentOS 7 安装详细教程

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; CentOS 7 是一个稳定的企业级 Linux 发行版&#xff0c;广泛用于服务器环境。CentOS 7 是基于 Red Hat Enterprise Linux (RHEL) 构建的企业级 Linux 发行版&#xff0c;提供免费的、开源的操作系统&#xf…...

mybatis-plus + springboot 多对多实例

在MyBatis Plus中&#xff0c;自动填充数据是一种非常实用的功能&#xff0c;它可以自动地为一些字段设置默认值&#xff0c;比如创建时间和更新时间。对于多对多关系来说&#xff0c;虽然自动填充主要针对单一实体的字段&#xff0c;但在某些情况下&#xff0c;你可能也需要在…...

SpringBoot日志整合

Spring Boot 整合日志框架的核心是通过 spring-boot-starter-logging 依赖来实现的&#xff0c;它默认整合了 Logback 日志框架。 Spring Boot 对各种日志框架进行了自动配置&#xff0c;使得我们可以很容易地在 Spring Boot 应用中使用日志。 Spring Boot 在类路径下寻找 Log…...

信创教育:培养未来科技创新的生力军

随着全球数字化转型的加速&#xff0c;信息技术应用创新&#xff08;简称“信创”&#xff09;产业作为推动国家信息技术自主可控和产业升级的关键领域&#xff0c;正迎来前所未有的发展机遇。信创教育&#xff0c;作为培养未来科技创新生力军的重要阵地&#xff0c;其重要性和…...

slowfast

核心网络网络架构: 1、分别获取高频和低频图像数据 2、分别进行特征提取 3、特征融合 4、预测 网络结构细节&#xff1a;...

怎么调试python脚本

打开pycharm community 2019.1软件&#xff0c;创建一个项目。 创建一个py后缀的文件作为示范&#xff0c;文件名自己定义。 编写代码&#xff0c;然后右键点击进行运行&#xff0c;查看一下是否有问题。 点击右上角的虫子图标&#xff0c;然后下面会有控制面板出来&#xff0c…...

Flask获取请求信息

示例代码 from flask import Flaskapp = Flask(__name__)if __name__ == "__main__": app.run(debug=True) 1、获取请求头 from flask import request@app.route("/headers", methods=["GET"])def get_headers(): headers = request.heade…...

Overleaf中放置高分辨率图片的方法

如果将ppt中的图片另存为png或jpg等格式&#xff0c;如果图中有密集的编码网格&#xff0c;则生成的pdf会糊掉。如何确保生成的pdf中的图片放大后仍然保持细节&#xff1f;亲测方案&#xff1a; 1、将ppt中的图片尺寸记下来&#xff0c;然后在ppt→设计中将ppt模板的大小设置成…...

【C语言】动态内存管理(malloc,free,calloc,realloc详解 )

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html &#x1f381;代码托管:C语言: C语言方向&#xff08;基础知识和应用&#xff09; (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 一、…...

如何寻找数值仿真参数最优解?CFD参数优化详解3来袭

本期文章将通过2个简单案例演示参数优化的操作步骤&#xff0c;一起来看看吧&#xff01; 流程自动化 实现 CFD 参数优化&#xff0c;首先要创建流程自动化。用户可采用SimLab的Python宏命令&#xff0c;录制建模流程。或在HyperWorks CFD模块的Template Manager创建Tcl/Tk命令…...

虚拟机macos中构建llvm、clang并配置Xcode

安装虚拟机macos&#xff0c;并安装brew&#xff1a; 安装vmware&#xff1a;https://www.bilibili.com/video/BV1Wo4y1E7fc/安装最新版的macos&#xff1a;极限苹果-Mac论坛-提供Mac软件和macOS苹果系统镜像下载下载并安装brew&#xff1a;版本要低&#xff0c;我装的是4.3.5…...

Java 中的 @SneakyThrows 注解详解:简化异常处理的利与弊

在 Java 开发中&#xff0c;异常处理是一个不可避免的重要部分。我们经常需要处理各种检查型异常&#xff08;checked exceptions&#xff09;&#xff0c;这有时会导致代码变得冗长且难以维护。为了简化异常处理&#xff0c;Lombok 提供了一个强大的注解——SneakyThrows。本文…...

系统编程 day11 进程(线程)3

fork函数的总结&#xff1a; 总结对进程学习之中的回收函数wait wait函数&#xff1a; 1.获取子进程的退出状态 2.回收资源------会让僵尸态的子进程销毁 注&#xff1a;1.wait函数本身是一个阻塞操作&#xff0c;会使调用者阻塞 2.父进程要获得子进程的退出状态 子进程&…...

[ Python 原理分析 ]如何实现用户实现博客文章点赞-物联网Python

目录 一、前言 二、Python爬虫 三、详细操作 3.1 建立基本工程 3.2 获取文章列表 3.2.1 找到获取文章请求 3.2.2 分析获取请求 3.2.3 构建获取请求 3.2.4 调试打印 3.3 实现点赞操作 3.3.1 判断点赞状态 3.3.2 找到点赞请求 3.2.3 分析点赞请求 3.2.4 构建点赞请…...

【47 Pandas+Pyecharts | 杭州二手房数据分析可视化】

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 过滤数据2.3 行政区处理2.4 地址处理2.5 房屋信息处理2.6 面积处理2.7 楼层处理2.8 年份处理2.9 房价处理2.10 删除不用的列2.11 数据类型转换2.12 查看…...

C++入门基础知识13

C 的关键字&#xff08;接上一篇博文&#xff09;&#xff01;&#xff01; 10. const_cast用法&#xff1a; 该运算符用来修改类型的 const 或 volatile 属性。除了 const 或 volatile 修饰之外&#xff0c; type_id 和 expression 的类型是一样的。常量指针被转化成非常量指针…...

IP地址证如何实现HTTPS访问?(内网IP、公网IP)

IP地址证书&#xff08;全称为IP地址的SSL/TLS证书&#xff09;是实现通过IP地址进行HTTPS访问的关键。以下是实现这一目标的详细步骤&#xff1a; 一、选择证书颁发机构&#xff08;CA&#xff09; 1.选择支持IP证书的CA&#xff1a;并非所有证书颁发机构都提供为IP地址颁…...

东土科技车规级网络芯片获批量应用

东土科技孵化的我国第一颗国产汽车芯片名录的车规级TSN交换网络芯片&#xff0c;于近期获得国家新能源汽车技术创新中心10万片芯片订单&#xff0c;将规模化应用于车载网关&#xff0c;赋能新一代自主可控汽车网络通信架构。 车规级TSN交换网络芯片于2021年流片成功&#xff0…...

nvidia系列教程-AGX-Orin pcie扩展M.2磁盘调试笔记

目录 前言 一、AGX-Orin pcie接口介绍 二、原理图连接 三、SDK配置 四、M.2磁盘调试 总结 前言 NVIDIA Jetson AGX Orin 是一款强大的嵌入式平台,广泛应用于 AI 推理、机器人和自动驾驶等领域。在扩展存储方面,PCIe 接口的 M.2 SSD 是一个常见的选择。本篇博客将记录如何…...

haproxy七层代理知识点以及各种配置

1.为什么用haproxy 当后端主机有一个出现问题了的时候&#xff0c;我们需要访问的流量全部打到正常工作的后端主机&#xff0c;所以我们需要后端检测&#xff0c;lvs没有后端检测&#xff0c;所以就需要用到haproxy 2.负载均衡 2.1 什么是负载均衡 负载均衡&#xff0c;Loa…...

uniapp自定义浮动图标、列表布局

uniapp自定义浮动图标 <button class="fab" @click="goPage"><image src="../../../static/yiyuan.png" mode="" style="width: 60rpx;height:60rpx;"></image></button>.fab {z-index: 100;positi…...

学习嵌入式入门(十)高级定时器简介及实验(下)

一、高级定时器互补输出带死区控制实验 上图中&#xff0c;CH1 输出黄色的 PWM&#xff0c;它的互补通道 CH1N 输出绿色的 PWM。通过对比&#xff0c;可以 知道这两个 PWM 刚好是反过来的&#xff0c;CH1 的 PWM 为高电平期间&#xff0c;CH1N 的 PWM 则是低电平&#xff0c; 反…...

使用python在不改变原有excel的格式下,修改指定单元格格式

需求 有一个账单&#xff0c;需要生成一个副本&#xff0c;但是需要将交易员列隐藏&#xff0c;不能改变原有的格式 xlsx的文件容易实现&#xff0c;使用openpyxl实现 xls的文件使用xlrdxlutil实现 参考了https://segmentfault.com/q/1010000008270267 class GenCopyReport(o…...

MySQL数据库:详细安装与配置指南

目录 背景: 一.下载过程(MySQL数据库): 二.安装过程(MySQL数据库)&#xff1a; 三.验证MySQL是否安装成功 背景: MySQL 是一个流行的开源关系数据库管理(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后俩该公司被Sun Microsystems收购&#xff0c;Sun Microsyste…...

python爬虫代理IP实战

Python爬虫代理IP实战指南 在进行网络爬虫时&#xff0c;使用代理IP可以有效隐藏真实IP地址&#xff0c;避免被目标网站封禁。本文将通过实际示例&#xff0c;展示如何在Python中使用代理IP进行网络爬虫。 1. 环境准备 首先&#xff0c;确保您已安装Python和所需的库。在本示…...

样式,常用组件

3、代码实现登录的思路 设置属性的成员方法都有统一的命名规范&#xff1a; set&#xff08;&#xff09;//就是某种属性的名字 父窗口&#xff1a;组件嵌套到那个主窗口中&#xff0c;这个主窗口就是父窗口 第一步&#xff1a;创建一个标签对象用来显示登录界面的标题 QLabe…...

Django Project | 云笔记练习项目

文章目录 功能整体架构流程搭建平台环境子功能先创建用户表 并同步到数据库1.用户注册密码存储 -- 哈希算法唯一索引引发的重复问题 try登陆状态保持 -- 详细看用户登录状态 2. 用户登录会话状态时间 cookie用户登录状态校验 3. 网站首页4.退出登录5.笔记模块 列表页添加笔记 …...

Zookeeper的监听机制

Zookeeper的监听机制是Zookeeper框架中一个至关重要的功能&#xff0c;它实现了分布式系统中数据状态变化的实时通知&#xff0c;使得客户端能够及时响应并处理这些变化。下面将详细解析Zookeeper的监听机制及其原理&#xff0c;包括监听器的注册、事件通知的处理、监听器的特点…...

Swift withAnimation 动画完成监听

在ios17中withAnimation有completion方法可以监听动画完成&#xff0c;但是低于ios17没有&#xff0c;需要自定义一个监听器&#xff0c;原理就是通过AnimatableModifier可以监听到值的didSet修改&#xff0c;我们就可以调用回调函数。 代码 // 动画完成监听 struct Animatabl…...

大学关工委加强自身建设网站宣传/关键词优化软件

vue框架介绍 框架,framework,是能够让程序开发人员更好的专注于业务逻辑的开发,而无需关心底层功能的实现。 vue是一个渐进式 JavaScript 框架,Vue (读音 /vjuː/,类似于 **view**) 是一套用于构建用户界面的**渐进式框架**。与其它大型框架不同的是,Vue 被设计为可以自底…...

济南 论坛网站建设/推广形式

Activity的构成并不是一个Activity对象再加上一个布局那么简单 再Activity和开发人员设置的视图之间还隔着两层。实际上视图会被设置给一个Window 类&#xff0c;这个Window中含有一个DecorView&#xff0c;这个DecorView才是窗口的顶级视图。 开发人员设置的布局会被设置到这…...

电子商务网站调研/武汉网站推广

通常我们部署前端node通过 npm install,npm run dev |npm run pro来部署前端&#xff0c; 这次部署由于很多奇奇怪怪的bug导致一直run server失败&#xff0c; 虽然后来通过各种换源和使用cnpm和yran替代npm解决了&#xff0c; 但还是觉得好麻烦&#xff1b;而且感觉这种方式部…...

二季域名做网站/佛山seo按效果付费

对于从事前端工作的小伙伴&#xff0c;掌握Vue&#xff0c;React这样的框架可以说是前端基本功了。人人都会用&#xff0c;那我们怎样才能写得比别人优雅&#xff1f;比别人漂亮&#xff1f;鉴于一线互联网大厂在前沿技术领域的持续研究和大规模投入&#xff0c;直接向他们取经…...

更换网站首页模板怎么做/做网络推广有哪些平台

PHP - PDT - HTML Syntax Validator (for PHP Files)由于HTML Syntax Validator (for PHP Files)可能会导致内存不足&#xff0c;此时可以关闭HTML Syntax Validator (for PHP Files)&#xff0c;位置在Windows菜单&#xff0c;Preferences菜单项&#xff0c;Validation&#x…...

做公司网站的南宁公司/企业网络营销策略分析案例

闭包又称词法闭包 闭包最早定义为一种包含<环境成分>和<控制成分>的实体. 解释一&#xff1a;闭包是引用了自由变量的函数&#xff0c;这个被引用的变量将和这个函数一同存在。 解释二&#xff1a;闭包是函数和相关引用环境组成的实体。 注&#xff1a;<自由变量…...