自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(397)
  • 收藏
  • 关注

原创 14.QT-多元素控件|QListWidget|QTableWidget|QTreeWidget(C++)

以QTableWidget和QTableView为例.xxWidget基于xxView同时把model和controller都帮我们实现好了拿过来就可以使用.人家提供了功能很方便的api,让我们直接就用。

2025-04-21 21:49:35 337

原创 13.QT-DateTime Edit|Dial|Slider|日期计算器|调整窗口透明度|调整窗口大小|自定义快捷键(C++)

设置-减⼩value,设置=增加value.默认情况下滑动条可以通过⽅向键或者pageUp/pageDown调整⼤⼩.1)在界⾯上创建滑动条和label2)编写初始化代码3)创建 valueChanged 的slot函数ui->label->setText("当前的值为: " + QString::number(value));4)修改widget.cpp构造函数,增加快捷键使⽤ QShortCut 类设置快捷键.

2025-04-21 14:30:38 566

原创 12.QT-Combo Box|Spin Box|模拟点餐|从文件中加载选项|调整点餐份数(C++)

因此Qt就⾃⼰打造了⼀套库,实现了字符串,容器,⽂件操作,多线程,⽹络操作,定时器,正则表达式等内容.(由于C++标准委员会的不作为,⾄今仍然有些Qt提供的功能,是标准库不具备的)使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰"微调框",它是带有按钮的输⼊框.可以⽤来输⼊整数/浮点数.通过点击按钮来修改数值⼤⼩.之所以存在两套,是因为Qt诞⽣较早(1991年左右),此时C++还没有完成"标准化"的⼯作,C++标准库这样的概念⾃然也没有诞⽣.1)在界⾯上创建三个下拉框,和⼀个按钮.

2025-04-21 14:21:32 617

原创 11.QT-输入类控件|Line Edit|Text Edit|录入个人信息|验证输入框数据|验证两次输入一致|切换显示密码|获取多行输入内容|验证输入框各种信号(C++)

此处要求在输⼊框中输⼊⼀个合法的电话号码(1开头,11位,全都是数字).如果验证不通过,则确定按钮⽆法点击.正则表达式是⼀种在计算机中常⽤的,使⽤特殊字符描述⼀个字符串的特征的机制.在进⾏字符串匹配时⾮常有⽤.3)执⾏程序,可以看到当输⼊框中的内容发⽣变化时,label中的内容同步发⽣改变.4)执⾏程序,可以看到,随着⽤⼾输⼊内容之后,点击按钮,就能打印到输⼊的信息。QLineEdit ⽤来表⽰单⾏输⼊框.可以输⼊⼀段⽂本,但是不能换⾏.1)在界⾯上创建三个输⼊框和两个单选按钮,⼀个普通按钮.

2025-04-20 21:16:09 768

原创 10.QT-显示类控件|LCD Number|ProgressBar|Calendar Widget(C++)

Qt中规定,任何对于GUI上内容的操作,必须在主线程中完成.像Widget构造函数,以及connect连接的slot函数,都是在主线程中调⽤的.⽽我们⾃⼰创建的线程则不是.⽐如调整了某个元素的尺⼨,就可能影响到内部的⽂字位置,或者其他元素的位置.这⾥⼀连串的修改,都是需要按照⼀定的顺序来完成的.这样的约定主要是因为GUI中的状态往往是牵⼀发动全⾝的,修改⼀个地⽅,就需要同步的对其他内容进⾏调整.⽐如需要读取⼀个很⼤的⽂件,就可以获取⽂件的总的⼤⼩,和当前读取完毕的⼤⼩,来设置进度条的⽐例.

2025-04-20 16:37:04 844

原创 9.QT-显示类控件|Label|显示不同格式的文本|显示图片|文本对齐|自动换行|缩进|边距|设置伙伴(C++)

此处的 resizeEvent 函数我们没有⼿动调⽤,但是能在窗⼝⼤⼩变化时被⾃动调⽤.这个过程就是依赖C++中的多态来实现的.Qt框架内部管理着QWidget对象表⽰咱们的窗⼝.在窗⼝⼤⼩发⽣改变时,Qt就会⾃动调⽤ resizeEvent 函数.但是由于实际上这个表⽰窗⼝的并⾮是QWidget,⽽是QWidget的⼦类,也就是咱们⾃⼰写的Widget.此时虽然是通过⽗类调⽤函数,但是实际上执⾏的是⼦类的函数(也就是我们重写后的 resizeEvent ).

2025-04-20 14:06:46 380

原创 8.QT-按钮类控件|Push Button|Radio Button|Check Box|Tool Button(C++)

五个按钮的objectName分别为 pushButton_target , pushButton_up ,pushButton_down ,pushButton_left , pushButton_right 五个按钮的初始位置随意,其中 pushButton_target 尺⼨设置为。QCheckBox 表⽰复选按钮.可以允许选中多个.和 QCheckBox 最相关的属性也是 checkable 和 checked ,都是继承⾃QAbstractButton .

2025-04-20 09:29:26 874

原创 NO98十六届蓝桥杯备战|数论板块-质数|质数和合数|试除法|质数筛|埃氏筛|线性筛|线性筛素数|素数密度|Goldbach‘s Conjecture(C++)

关于时间复杂度,⽹上各个地⽅都有详细的证明。因为很⿇烦,⽽且涉及积分的知识,这⾥就不再赘述。先筛⼀下质数,然后在筛出来的质数中,找出两个数的和等于给定的数。每个数只会被⾃⾝最⼩的质因数筛掉⼀次,时间复杂度为O(n)上⼀个专题学习了如何判断⼀个数是否是质数,如果此时想知道。埃⽒筛的时间复杂度为:O(n log n)。线性筛法,⼜称欧拉筛法。中的素数⾥⾯,第k个素数是多少?,因此时间复杂度为O(

2025-04-19 18:58:52 795

原创 7.QT-常用控件-QWidget|font|toolTip|focusPolicy|styleSheet(C++)

CSS中可以设置的样式属性⾮常多.基于这些属性Qt只能⽀持其中⼀部分,称为QSS(Qt Style Sheet).具体的⽀持情况可以参考Qt⽂档中"Qt Style Sheets Reference"章节.此处只是进⾏⼀个简单的演⽰.另外,Qt Designer只能对样式的基本格式进⾏校验,不能检测出哪些样式不被Qt⽀持.⽐如 textalign: center 这样的⽂本居中操作,就⽆法⽀持.所谓"样式",包括不限于⼤⼩,位置,颜⾊,间距,字体,背景,边框等.

2025-04-19 15:03:56 625

原创 6.QT-常用控件-QWidget|windowTitle|windowIcon|qrc机制|windowOpacity|cursor(C++)

1)创建qrc资源⽂件,添加前缀 / ,并加⼊ huaji.jpg//创建⼀个位图对象, 加载⾃定义光标图⽚//缩放图⽚为 100 * 100 的尺⼨//构造光标对象//设置光标delete ui;这个默认情况下,鼠标点击时,相当于图片的左上角在进行点击热点所在的位置以图片左上角为0,0原点,找到10,10 这个位置作为鼠标真正点击的位置了.通过这个函数对图片进行缩放注意缩放不是修改图片对象本身,而是返回一个新的图片对象副本。

2025-04-19 11:11:39 679

原创 5.QT-常用控件-QWidget|enabled|geometry|window frame(C++)

实现图形化界面的程序.Qt中已经给我们提供了很多的“控件"就需要学习和了解这些控件,学会如何使用这些控件编程讲究的是“站在巨人的肩膀上”,而不是“从头发明轮子"一个图形化界面上的内容,不需要咱们全都从零去实现.Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框.) 咱们拿过来就能直接使用.

2025-04-18 21:17:03 1052

原创 NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)

秦九韶算法是⼀种将⼀元n次多项式的求值问题转化为n个⼀次式的算法。其⼤⼤简化了计算过程,即使在现代,利⽤计算机解决多项式的求值问题时,秦九韶算法依然是最优的算法。证明gcd(a, b) = gcd(b, a mod b) ,思路:先证左边等于右边,再证右边等于左边。最⼤公约数Greatest Common Divisor,常缩写为gcd。三个数的最⼤公约数,先求其中两个的gcd,再与第三个求gcd。欧⼏⾥得算法也称辗转相除法,可以求出两个整数的最⼤公约数。这样对于⾼精度的数取模,就可以分阶段取模。

2025-04-18 15:06:03 715

原创 4.QT-信号和槽|存在意义|信号和槽的连接方式|信号和槽断开|lambda表达式|信号和槽优缺点(C++)

Qt5在Qt4的基础上提⾼了信号与槽的灵活性,允许使⽤任意函数作为槽函数。但如果想⽅便的编写槽函数,⽐如在编写函数时连函数名都不想定义,则可以通过Lambda表达式来达到这个⽬的。Lambda表达式是C++11增加的特性。C++11中的Lambda表达式⽤于定义并创建匿名的函数对象,以简化编程⼯作。Lambda表达式的语法格式如下capture捕获列表params参数表opt函数选项ret返回值类型函数体。

2025-04-18 11:15:28 547

原创 3.QT-信号和槽|自定义槽函数|自定义信号}自定义的语法}带参数的信号和槽(C++)

在Qt中,⽤⼾和控件的每次交互过程称为⼀个事件。⽐如"⽤⼾点击按钮"是⼀个事件,"⽤⼾关闭窗⼝"也是⼀个事件。每个事件都会发出⼀个信号,例如⽤⼾点击按钮会发出"按钮被点击"的信号,⽤⼾关闭窗⼝会发出"窗⼝被关闭"的信号。Qt中的所有控件都具有接收信号的能⼒,⼀个控件还可以接收多个不同的信号。对于接收到的每个信号,控件都会做出相应的响应动作。例如,按钮所在的窗⼝接收到"按钮被点击"的信号后,会做出"关闭⾃⼰"的响应动作;

2025-04-18 11:05:34 988

原创 NO.96十六届蓝桥杯备战|图论基础-多源最短路|Floyd|Clear And Present Danger|灾后重建|无向图的最小环问题(C++)

在floyd算法中,我们是⼀个点⼀个点加⼊到最短路的更新中,那么这道题其实就是限制了我们加点的时机。当从前往后遍历每次询问的时候,直到时间点在询问的时间t之前的点,都可以加⼊到最短路的更新中。floyd算法本质是动态规划,⽤来求任意两个结点之间的最短路,也称插点法。通过不断在两点之间加⼊新的点,来更新最短路。适⽤于任何图,不管有向⽆向,边权正负,但是最短路必须存在(也就是不存在负环)。那么就可以⼀边读取询问,⼀边通过时间限制,更新最短路。多源最短路:即图中每对顶点间的最短路径。

2025-04-17 16:22:27 534

原创 2.QT初识-实现hello world|图形化方式|纯代码方式|对象树|乱码|编辑框|按钮|坐标系(C++)

使用自己定义的MyLabel代替原来的QLabel,所谓的继承本质上是扩展,保持原有功能不变的基础上,给对象扩展出一个析构函数,通过析构函数,打印一个自定义的内容,方便观察程序运行效果。使用qDebug,打印的调试日志,是可以统一进行关闭的,这样程序发布的时候,用户就看不到日志,可以通过编译开关,统一关闭。上述代码在Qt中不会出现内存泄漏。Qt原生的api中,涉及到的接口,用的是Qt自己的容器。创建自定义的类,最主要的目的,是自定义一个析构函数,在析构函数中,完成打印,方便看到最终的自动销毁对象的效果。

2025-04-17 13:59:41 1005

原创 NO.95十六届蓝桥杯备战|图论基础-单源最短路|负环|BF判断负环|SPFA判断负环|邮递员送信|采购特价产品|拉近距离|最短路计数(C++)

如果图中存在负环,那么有可能不存在最短路。

2025-04-16 21:01:50 839

原创 NO.94十六届蓝桥杯备战|图论基础-单源最短路|常规dijkstra|堆优化dijkstra|bellman-ford|spfa(C++)

在图G中,假设vi​和vj​为图中的两个顶点,那么vi​到vj​路径上所经过边的权值之和就称为带权路径⻓度。由于vi​到vj​的路径可能有多条,将带权路径⻓度最短的那条路径称为最短路径。

2025-04-16 20:58:08 1012

原创 NO.21|计算机网络|静态路由动态路由|路由协议|域名解析|DNS|网关|CSRF攻击|MAC地址IP地址|TCP三次握手四次挥手|TCP和UDP|TCP连接关闭|TCP慢启动

DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。打开浏览器,输入一个域名。

2025-04-15 21:17:16 998

原创 NO.93十六届蓝桥杯备战|图论基础-拓扑排序|有向无环图|AOV网|摄像头|最大食物链计数|杂物(C++)

对于每⼀个事件i,完成它的最⼩时间为:完成前驱所有事件的最⼩时间中的最⼤值+当前事件的完成时间。因此,可以在拓扑排序的过程中,维护每⼀个事件完成的最⼩时间,然后更新当前事件的最⼩时间。拓扑排序的⽬标是将有向⽆环图中的所有结点排序,使得排在前⾯的结点不能依赖于排在后⾯的结点。对于每⼀个节点i,通过它的路径为:前驱所有结点的路径总数之和。因此,可以在拓扑排序的过程中,维护从起点开始到达每⼀个节点的路径总数。举⼀个现实中的例⼦:课程的学习是有优先次序的,如果规划不当会严重影响学习效果。拓扑排序判断是否有环。

2025-04-15 15:15:03 786

原创 NO.92十六届蓝桥杯备战|图论基础-最小生成树-Prim算法-Kruskal算法|买礼物|繁忙的都市|滑雪(C++)

一个具有n个顶点的连通图,其⽣成树为包含n-1条边和所有顶点的极⼩连通⼦图。对于⽣成树来说,若砍去⼀条边就会使图不连通图;若增加⼀条边就会形成回路。⼀个图的⽣成树可能有多个,将所有⽣成树中权值之和最⼩的树称为最⼩⽣成树。构造最⼩⽣成树有多种算法,典型的有普利姆(Prim)算法和克鲁斯卡尔(Kruskal)算法两种,它们都是基于贪⼼的策略。

2025-04-14 22:34:58 484

原创 NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)

图G是由顶点集V和边集E组成,记为G = (V, E),其中V(G)表⽰图G中顶点的有限⾮空集;E(G)表⽰图G中顶点之间的关系(边)集合。若Vv1v2vnVv1​v2​vn​,则⽤∣V∣|V|∣V∣表⽰图G中顶点的个数,也称图G的阶,Euv∣u∈Vv∈VEuv∣u∈Vv∈V,⽤∣E∣|E|∣E∣表⽰图G中边的条数。图是较线性表和树更为复杂的数据结构。

2025-04-11 22:08:35 1403

原创 NO.90十六届蓝桥杯备战|动态规划-区间DP|回文字串|Treats for the Cows|石子合并|248(C++)

区间dp也是线性dp的⼀种,它⽤区间的左右端点来描述状态,通过⼩区间的解来推导出⼤区间的解。因此,区间DP的核⼼思想是将⼤区间划分为⼩区间,它的状态转移⽅程通常依赖于区间的划分点。在数组后⾯,将原始数组复写⼀遍,然后在倍增之后的数组上做⼀次⽯⼦合并(弱化版),就能得到以所有位置为起点并且⻓度为len 的最⼩合并代价。贪⼼:每次都拿两边最⼩的。反例:4, 1, 5, 3。先找重复⼦问题定义状态表⽰。处理环形问题的技巧:倍增。

2025-04-11 20:07:47 929

原创 NO.89十六届蓝桥杯备战|动态规划-分组背包-混合背包-多维费用背包|通天之分组背包|排兵布阵|樱花|L国的战斗间谍(C++)

⼀个城堡⼀个城堡分析,对于第n个城堡,考虑派遣的⼈数应该在所有玩家对这个城堡派遣⼈数中考虑。⽐如⽰例⼆的第三个城堡,我们考虑派遣的⼈数就是1和13 (因为要严格⼤于两倍,⼤⼀点就是最好的)。因此,把每⼀个城堡看成⼀个⼩组,所有玩家在这个城堡派遣的⼈数看成⼀个⼀个物品,要求的就是在派遣⼈数不超过m 的情况下的最⼤得分,符合分组背包。⼩优化:对每个城堡中玩家的派遣⼈数从⼩到⼤排序,这样在选择第k个⼈数的时候,总得分就是k × i。因为⼀个组⾥⾯最多只能挑⼀个元素,所以我们就以⼀个组为单位。

2025-04-11 16:01:01 487

原创 NO.88十六届蓝桥杯备战|动态规划-多重背包|摆花(C++)

正好是多重背包求⽅案数的模型,我们可以⽤多重背包的思考⽅式来解决这道题。个,在总数恰好等于m 时的总⽅案数。连续的⼆进制数有⼀个性质,就是。解法⼆:转化成01背包问题。优化⽅式:⽤⼆进制将。题意:每⼀种花可以选。

2025-04-10 21:56:47 814

原创 NO.87十六届蓝桥杯备战|动态规划-完全背包|疯狂的采药|Buying Hay|纪念品(C++)

因为纪念品可以在当天买,当天卖。因此所有的交易情况,就可以转换成"某天买隔天卖"的情况。从前往后,⼀天⼀天的考虑如何最⼤⾦币。第⼆问仅需修改⼀下初始化以及最终结果即可。

2025-04-10 20:21:34 943

原创 NO.86十六届蓝桥杯备战|动态规划-01背包|采药|小A点菜|Cow Frisbee Team(C++)

背包问题是动态规划中最经典的问题,很多题⽬或多或少都有背包问题的影⼦。它的基本形式是:给定⼀组物品,每个物品有体积和价值,在不超过背包容量的情况下,选择物品使得总价值最⼤。背包问题求⽅案数,稍微修改⼀个状态表⽰,然后根据具体问题分析状态转移⽅程和初始化即可。基本01 背包问题,将时间看成体积,就是标准的不放满的01 背包问题。第⼆问仅需修改⼀下初始化以及最终结果即可。01 背包问题变形。

2025-04-10 16:35:59 635

原创 NO.85十六届蓝桥杯备战|动态规划-经典线性DP|最长上升子序列|合唱队形|最长公共子序列|编辑距离(C++)

经典线性dp问题有两个:最⻓上升⼦序列(简称:LIS)以及最⻓公共⼦序列(简称:LCS),这两道题⽬的很多⽅⾯都是可以作为经验,运⽤到别的题⽬中。⽐如:解题思路,定义状态表⽰的⽅式,推到状态转移⽅程的技巧等等。两个字符串之间的dp 问题,与最⻓公共⼦序列的分析⽅式类似。因此,这两道经典问题是⼀定需要掌握的。

2025-04-10 13:41:24 821

原创 NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)

路径类dp是线性dp的⼀种,它是在⼀个n×m的矩阵中设置⼀个⾏⾛规则,研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题。贪⼼+两次dp是错误的,因为两次最优不等于全局最优,可以举出反例。正解应该是同时去⾛两条路,两者相互影响,所以放在⼀起考虑。

2025-04-09 21:42:21 1551 3

原创 NO.83十六届蓝桥杯备战|动态规划-基础线性DP|台阶问题|最大子段和|传球游戏|乌龟棋(C++)

线性dp是动态规划问题中最基础、最常⻅的⼀类问题。它的特点是状态转移只依赖于前⼀个或前⼏个状态,状态之间的关系是线性的,通常可以⽤⼀维或者⼆维数组来存储状态。

2025-04-09 19:33:37 1049

原创 NO.82十六届蓝桥杯备战|动态规划-从记忆化搜索到动态规划|下楼梯|数字三角形(C++)

的值时,我们仅仅需要前三个格⼦的值,第i-4个及其之前的格⼦的值已经毫⽆⽤处了。因此,可以⽤三个变量记录i位置之前三个格⼦的值,然后在填完i位置的值之。需要注意,当⽤因为我们当前这个位置的值需要左上⻆位置的值,因此滚动数组优化的时候,要改变第⼆维的遍历顺序。我们发现,在填写第i ⾏的值时,我们仅仅需要前⼀⾏的值,并不需要第i - 2 以及之前⾏的值。因此,我们可以只⽤⼀个⼀维数组来记录上⼀⾏的结果,然后在这个数组上更新当前⾏的值。学习动态规划最经典的⼊⻔题。

2025-04-09 16:31:58 1349

原创 NO.81十六届蓝桥杯备战|数据结构-Trie树-字典树-前缀树|于是他错误的点名开始了|最大异或对 The XOR Largest Pair(C++)

字典树的概念Trie树⼜叫字典树或前缀树,是⼀种能够快速插⼊和查询字符串的数据结构。它利⽤字符串的公共前缀,将字符串组织成⼀棵树形结构,从⽽⼤⼤提⾼了存储以及查找效率。我们可以把字典树想象成⼀棵多叉树,每⼀条边代表⼀个字符,从根节点到某个节点的路径就代表了⼀个字符串。例如,要存储 “abc” 、 “abd” 、 “acde” 以及 “cd” 时,构建的字典树如下字典树的作⽤。

2025-04-09 14:03:52 574

原创 NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)

【代码】NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)

2025-04-09 10:20:50 1203 1

原创 NO.79十六届蓝桥杯备战|数据结构-扩展域并查集-带权并查集|团伙|食物链|银河英雄传说(C++)

把真话⾥⾯的相互关系,⽤"带权并查集"维护起来,权值表⽰当前节点相对于根节点的距离。针对x ,扩展三个域:同类域x,捕⻝域x+n,被捕⻝域x+n+n。

2025-04-08 21:09:22 783

原创 NO.78十六届蓝桥杯备战|数据结构-并查集|双亲表示法|初始化|查询|合并|判断|亲戚|Lake Counting|程序自动分析(C++)

在学习树这个数据结构的时,讲到树的存储⽅式有很多种:孩⼦表⽰法,双亲表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。对⼀棵树⽽⾔,除了根节点外,其余每个结点⼀定有且仅有⼀个双亲,双亲表⽰法就是根据这个特点存储树的,也就是把每个结点的双亲存下来。路径压缩:在查询时,把被查询的节点到根节点的路径上的所有节点的⽗节点设置为根节点,从⽽减⼩树的深度。并查集(UnionFind):是⼀种⽤于维护元素所属集合的数据结构,实现为⼀个森林,其中每棵树表⽰⼀个集合,树中的节点表⽰对应集合中的元素,根节点来代表整个集合。

2025-04-08 18:13:19 1000

原创 NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)

【代码】NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)

2025-04-08 15:18:18 391

原创 NO.76十六届蓝桥杯备战|数据结构-单调栈|发射站|Largest Rectangle in a Histogram(C++)

从右往左遍历元素,构造⼀个单调递减的栈。对于x位置⼦矩阵,找到左侧离它最近并且⽐它⼩的位置y ,那么。对于每⼀个⼦矩阵,求出它向左以及向右能延伸的最⼤⻓度即可。5. 寻找当前元素右侧,离它最近,并且⽐它⼤的元素在哪。同理再找到右侧离它最近并且⽐它⼩的位置z ,那么。针对其余两种情况,我们仅需逆序遍历数组即可。之间就是该矩阵能到达的左端。之间就是该矩阵能到达的右端。

2025-04-08 14:36:08 1052

原创 NO.75十六届蓝桥杯备战|搜索算法-多源BFS-01BFS-Floodfill矩阵距离|刺杀大使|小明的游戏|Three States|Lake Counting|填涂颜色

那么,在BFS的过程中,可以将边权为0扩展出来的点放到队⾸,边权为1扩展出来的点放到队尾。正难则反:直接找出被1包围的0是很困难的,因为很难确定当前搜索到的这个0是否是被包围的。但是,我们如果从边缘的0开始搜索,搜索到的0⼀定是没有被包围的。不同于普通的bfs问题,01bfs问题在遍历的过程中,如果遇到之前已经遍历过的结点,有可能会找到⼀条更优的路线。直接找答案显然是不现实的,因为能⾛的路径实在是太多了,如果全都枚举出来时间上吃不消。因此,我们可以从边缘的0开始搜索,标记所有与边缘0相连的联通块。

2025-04-08 11:11:55 760

原创 NO.74十六届蓝桥杯备战|搜索算法-BFS|马的遍历|迷宫|Catch That Cow|八数码难题(C++)

宽度优先搜索的过程中,每次都会从当前点向外扩展⼀层,所以会具有⼀个最短路的特性。因此,宽搜不仅能搜到所有的状态,⽽且还能找出起始状态距离某个状态的最⼩步数。当把整个迷宫全部搜索完毕之后,扫描整个标记数组,求出出⼝的数量以及最短的距离。经过之前那么多题的铺垫,这道题的解法还是容易想到的。因为要求的是最短步数,因此可以⽤bfs解决。但是,前提条件是每次扩展的代价都是1,或者都是相同的数。那就从起点开始,⼀层⼀层的往外搜,⽤⼀个dist 数组记录最短距离。距离起点等距离的⼀层,天然具有最短性。

2025-04-07 17:16:34 908

原创 NO.73十六届蓝桥杯备战|搜索算法-剪枝与优化-记忆化搜索|数的划分|小猫爬山|斐波那契数|Function|天下第一|滑雪(C++)

因此,可以在递归的过程中,把每次算出来的结果存在⼀张「备忘录」⾥⾯。等到下次递归进⼊「⼀模⼀样」的问题之后,就「不⽤傻乎乎的展开计算」,⽽是在「备忘录⾥⾯直接把结果拿出来」,起到⼤量剪枝的效果。在搜索的过程中,如果发现特别多完全相同的⼦问题,就可以添加⼀个备忘录,将搜索的结果放在备忘录中。因为测试数据是多组的,并且模数都是p,再加上递归的过程中会递归的相同的问题,所以可以把递归改写成记忆化搜索。剪枝,形象得看,就是剪掉搜索树的分⽀,从⽽减⼩搜索树的规模,排除掉搜索树中没有必要的分⽀,优化时间复杂度。

2025-04-07 15:18:16 958

日语学习考级、语法知识点总结资料

日语的的语法知识点总结笔记,和日语学习方法总结。

2023-10-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除