- 博客(182)
- 收藏
- 关注
原创 多源最短路径算法(竞赛)
和松弛思想一样,任意两点之间的最短距离不可能全是直接的从 i 到 j,一定会有中间节点,所以我们设任意两点最短路径之间存在 k 个节点,分别遍历出 k 从 1 到 n 节点最小路径值那就是 ij 两点之间的最短路径算法。dp 方程:不选中间节点:dp[k][i][j] = dp[k - 1][i][j];选中间节点 k:dp[k][i][j] = dp[k - 1][i][k] + dp[k - 1][k][j];这一层的k完全依赖于上一层的k - 1,所以变成二维。
2025-03-23 18:34:27
314
原创 单源最短路径算法(竞赛)
介绍两种单源最短路径算法和配套的一个优化,所以四份代码。本质就是对所有边进行松弛操作。松弛操作:维护一个 dist 数组记录起点到对应下标对应节点的最短路径,所以对于每一条边,都可以用 min(dist[end], dist[start] + weight);来进行优化原来 dist[end] 的值。注意:dijkstra 算法只适用于没有负环的图。如果是有负环的图要用 bellman-ford 算法。
2025-03-23 17:44:13
882
原创 并查集(竞赛)
本质就是一个数组,数组的下标对应节点的编号,数组的值对应对应编号的节点的父节点。规定根节点的父节点是自己。规定三个集合的根节点分别是1 4 6。
2025-03-23 16:56:10
257
原创 工具栏、状态栏、子窗口介绍
状态栏可以存放许多控件,就像可以设置一个进度条,在网络不好的时候显示界面下面会有一个绿色的进度条告诉用户加载多少了。主窗口中出现的一个子窗口。
2025-03-16 14:26:12
316
原创 Qt 窗口以及菜单栏介绍
Qt 中的窗口类 QMainWindow 是继承于 QWidget 类,提供菜单栏,工具栏,子窗口,中央控件和状态栏的布局。这就是创建的窗口 ui 界面,自动创建了菜单栏和状态栏(之后会有问题)
2025-03-16 13:51:35
470
原创 QGridLayout 和 QFormLayout 介绍
网格布局和表单布局,网格布局实现 m * n 的布局模式,表单布局是网格布局的一种特殊,n * 2 的模式,就像是填表情况,左边是填写需求,右边是填写具体内容。
2025-03-13 18:29:06
238
原创 QVBoxLayout 和 QHBoxLayout 介绍
布局管理器:垂直布局(QVBoxLayout),水平布局(QHBoxLayout),网格布局(QGridLayout),表单布局(QFormLayout)这里要注意的是每个 widget 只能设置一个布局管理器,所以代码创建的只能一个,ui 界面拖拽的是先创建一个 widget 再创建布局管理器。布局管理可以嵌套:addLayout();
2025-03-13 18:19:07
321
原创 多元素控件
接下来会介绍一系列多元素控件:QListWidget, QListViewQTableWIdget, QTableViewQTreeWidget, QTreeView类似于 MVC 结构:M(model 数据)V(view 视图,界面)C(controller 控制器,数据到视图的显示,视图到数据的修改和存储)xxView 就是只实现了 V,M 和 C 都要程序员自己实现。xxWidget 基于 xxView 的基础上实现了 M 和 C,程序员只要调用 api 就行。
2025-03-11 18:38:30
185
原创 QDateTimeEdit 介绍
一个日期时间微调框,还有 QDateEdit 和 QTimeEdit 控件,只不过后两个属性信号没有 QDateTimeEdit 丰富,介绍一个就够了。
2025-03-10 20:03:33
312
原创 QLineEdit 介绍
上面的 inputMask 没有完全约束电话号码,因为号码开头要是1,要更具体的约束就需要正则表达式 + 验证器。约束逻辑:电话号码这个 QLineEdit 可以设置一个验证器对象,验证器对象的一种初始化方式就是参数为正则表达式,这样就能约束文本内容。验证逻辑:设置好验证器之后,验证器 QValidator 会有一个函数 validate(QString&, int) 来验证是否合法,返回值 QValidator::State。
2025-03-10 18:27:42
562
原创 QRadioButton 介绍
槽函数说明clicked()点击按钮触发事件点击按钮触发事件,参数是按钮是否被选中pressed()按下按钮触发事件released()松开按钮触发事件按钮选中状态被改变触发事件,参数是改变后按钮选中状态复选按钮 QCheckBox 简单就不单独开一篇文章。顾名思义就是可以选多个复选按钮。
2025-03-08 16:36:38
284
原创 QPushButton 介绍
由于是继承了 QAbstractButton,所以说是 QPushButton 的额外属性,其实是 QAbstractButton 相比于 QWidget 额外的属性。
2025-03-07 16:53:23
293
原创 Qt信号和槽
connect 函数:Q_OBJECT 宏自带的静态函数,用于关联信号和槽。下图是 connect 定义:信号源信号源发出的信号类型处理信号者处理信号方式下图是一个简单的 connect 函数使用:但是我们提到槽其实是一个函数,上面的 connect 函数参数是 const char* ,这是怎么回事呢?其实在早期传入信号和槽是需要调用宏来实现的,宏的作用就是把函数指针转成字符串,新版的 connect 函数重载了一个新的:定义了模板传入的就是任意类型的函数指针。
2025-03-03 19:10:08
337
原创 计算器算法题
227. 基本计算器 II - 力扣(LeetCode)由于限制太多,逻辑不算难,所以没有必要把中缀表达式转成后缀表达式。表达式特点:只有数字和运算符,所以数字之后一定是运算符。直接处理的逻辑:一个栈存数据,一个变量存下一个数据之前的符号。先循环读出字符串里面的一个数据,如果此时符号是+,直接入栈,如果是-,入栈数据的负数,如果是*,去除栈顶,两数相乘入栈,如果是/,去除栈顶,两数相除入栈(注意数据顺序),最后栈里面的数相加。代码:224. 基本计算器 - 力扣(LeetCode)由于限制太少,直接求难度太
2025-03-02 20:16:18
394
原创 初识编辑框和按钮
按钮当然也可以通过设置文本显示 hello world,但是这不是按钮最主要的功能,按钮可以接受到按的信号做出对应的反应。专业术语是:信号和槽。即给按钮关联一个按下的处理函数。关联的函数是 connect,是 Q_OBJECT 提供的一个静态函数。
2025-03-02 19:33:38
540
原创 Qt对象树
如下图 ui 界面:对应的对象树:所以如果是 new 出来的对象,指定父节点之后就会被挂到对象树中,作用是 Qt 自己帮我们销毁对象树的控件对象,一定不会出错。也不会存在内存泄漏问题。但是如果是栈上创建的对象,代码如下图:结果:因为出了 widget 构造函数之后,变量 QLabel 就会销毁,导致窗口啥也没有。
2025-03-02 19:07:54
262
原创 Qt空项目代码解释
Qt Creator 调用 Qt Designer 进入图形化界面编辑器,ui 文件的本质是xml,xml 里有哪些标签,属性是什么有程序员决定。Qt 中的 xml 文件去描述程序界面是什么样的,进一步 qmake 调用相关工具依据 xml 文件生成一些 C++ 代码把完整界面构建出来。顺便一提,上面的 .pro 文件是 Qt 项目的工程文件,也是 qmake 工具构建时的重要依据。即 xml + .pro 文件 = makefile 类似于。
2025-03-01 17:08:39
501
原创 布隆过滤器
把 key 转成哈希整型,通过多个哈希函数映射多个位置从而降低哈希冲突。注意:布隆过滤器无法解决哈希冲突,只能降低哈希冲突,哈希表能解决哈希冲突是因为哈希表确确实实存值进表,可以通过比较值是否相同来解决冲突带来的映射位置不准的问题,但是布隆过滤器是值存在,对应位置置1,不存在置0,不会存值进表(不然布隆过滤器的优势也不会是节省空间)所以是无法解决冲突,只能提高适当的哈希函数个数来减少冲突。而且布隆过滤器存在误判:全位置是1不一定值就存在,但是只要有一个位置是0那就是不存在。
2025-02-07 11:32:42
212
原创 哈希表及封装
unordered_map unordered_set 的底层就是哈希表。可以关联式容器。和 map set 的差异:unordered_map / set 是单向迭代器会通过哈希函数(直接定址法,除留余数法,平方取中法,随机数法,数字分析法)计算出哈希值,从而确定把数据存在哪个位置,然而计算出的哈希值都会有重复(称为哈希冲突),所以需要有解决哈希冲突的方法(闭散列(线性探测,二次探测),开散列(链地址法),多次散列)所以由于解决哈希冲突的方法不同,哈希表的实现也不同。下面会实现闭散列的线性探测法和开散列链
2025-02-06 21:16:06
1209
原创 递归练习八(记忆化搜索)
有意往动态规划问题上靠的话会发现 dfs 函数的设计都是和 dp 表一模一样,但是如果要用暴搜写逻辑代码就是截然不同,而且还超时,所以再次强调不要思考暴搜逻辑,一定错!!!!!!一定要思考动态规划逻辑!!!!!!记忆化搜索考虑三个部分:先看有没有记录,再看边界,最后中间逻辑。
2025-02-06 19:53:14
677
原创 动态规划练习八(01背包问题)
1049. 最后一块石头的重量 II - 力扣(LeetCode)其实01背包问题就是要你把问题转化成在一段数据里面取出一部分数据满足条件。数据只有一个。难点就是如何转化成取数据,如第二第三题就是把符号的正负选择转化成在一段数据中取出一些正数来满足题目要求。
2025-02-05 18:50:46
396
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人