双向宽度优先搜索
双向宽度优先搜索
BFS(宽度优先搜索)是我们最先接触的几个算法之一,和DFS(深度优先搜索)一起,成为初学者必学的两大搜索算法。使用队列这种先进先出的数据结构,在遍历图、树等方面有着巨大的作用,同时由BFS优化而来的SPFA最短路径算法、Dijkstra最短路算法等,也是非常经典的算法。
今天我要介绍的是一种不一样的BFS,以 P1379 八数码难题 - 洛谷 为例,介绍双向BFS。
对于一种起始状态和终末状态确定的搜索,很容易就能想到我们可以同时从头和尾开始搜索,直到搜索树相交时,我们就可以找到路径,这就是双向BFS。
以下这个图简单的介绍了双向BFS的原理:
题目描述
在 3×33\times 33×3 的棋盘上,摆有八个棋子,每个棋子上标有 111 至 888 的某一数字。棋盘中留有一个空格,空格用 000 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765123804765123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。
输入格式
输入初始 ...
C++ STL教程
C++ STL
C++ STL教程
一直以来在竞赛界一直有着一种传言,自己手搓的数组、栈、队列效率比STL高很多,甚至于还有江湖传说,有的人用自己写的就过了,用STL就超时。但其实STL恰恰在C++一众繁复的特性中,是最受人欢迎的之一。使用STL其实并不会让效率降低很多,反而可以让自己的程序更具有可读性,以及获得更低的编程复杂度(笑,现在真的还有人讲究编程复杂度这种玩意么)。
所以特此写下一篇教程。(也是为了让自己以后忘记STL用法的时候能记起来,hhh)
一、概念
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
组件
描述
容器(Containers)
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
...
寄18岁的自己
寄18岁的自己
穷日落月追晨光,执经叩问如初恍。
一手纸墨书人生,一心热血扬劲风。
三载光阴存碑中,纯真年代流如水。
儿郎何敢言轻狂,只愿回首无悔处。
潇洒真少年,窈窕美佳人,多年曾记否?
相会久相去,芳华难再觅,望正如初见少年。
——题记
我们抬笔,一支笔在白纸上答别人所问,一支笔在梦想中扬帆起航。
当李华笑着请你帮他写下最后一篇文章,留下“诚挚的,李华”;当带电粒子飞速越过加速电场,在磁场中偏转出优美的轨迹;当我们在夕阳的余晖下,洒下最后的墨水。
我们放下了手中的笔,若有所失。
总有一些东西,
要用消失来证明它的珍贵。
过了这个红绿灯路口,
我就要拐弯了。
无论我拐向何方,
这纯真的年代将永存心间。
你好,高考。
Evolution Host 免费 VPS
Evolution Host 免费 VPS
美国IDC服务商 Evolution Host 提供高质量VPS、高防服务器、游戏服务器等多种高性能云端解决方案。
不用信用卡,不用支付任何费用,甚至都不用注册。你只需要在你的博客里挂上他的文章或友链,Evolution Host 评估你的网站之后就会给你开通一台永久免费服务器。
提供最高高达16GRAM,8核处理器的VPS,当然实际申请到的大小取决于你网站的知名度和流量。那么一般来说,一个1核1G内存20G的SSD固态硬盘存储这样的配置是能拿到的。
申请通过
最高16GB DDR4 RAM、8 核心 CPU 和 DDoS 防护,就问你诱人不,而且还能…… (咳咳)
完成申请表单后只需等待即可,直到你收到如下所示邮件。
这封邮件里面包含一个链接,点击它可以看到给你提供的免费VPS的基本配置。
申请拒绝
如果是下面的这种邮件,那么说明对方拒绝了你,继续努力。
结语
顺便说一句,国外主机默认分配ipv6,当然还会给你一个中国区能访问的ipv4地址。
注意:前面Evolution Host 给你发的服务器配置链接里面有介绍他们的 ...
面向对象(一)
面向对象(一)
相信各位学习各种语言的时间都不短了,那么为什么感觉自己总是只能做点小脚本或者小工具呢?
那是因为你没有找到对象啊!(笑)
面向对象是现代软件工程的一个基本工具,几乎所有的现代高级语言都支持面向对象编程。本篇文章分上下篇,以C++为例介绍面向对象这一计算机世界中最基本的元素。
一、什么是面向对象
我们先来看看权威的定义:
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、特性、代码与方法。对象则指的是类(class)的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象[1][2]。
——https://zh.wikipedia.org/
概念总是很玄乎的,需要注意的是这段概念中的几个名词:
对象、类、程序与数据
与面向对象(Procedure Oriented 简称PO)相对的就是面向过程(Proc ...
誓言
誓言
爬山虎迎着清晨的阳光爬上教学楼,
桂花把她的清香撒满整个校园。
曾经深夜灯火通明的隔壁教学楼,成了自己;
曾经四处随风飘扬的励志口号,成了自己;
曾经向往用自己双手书写未来的日子,成了自己。
光阴之箭越过校园的绿荫大道,
我们成为了最大的学长。
我们又是否意识到,
已经来到的这一年,
将成为学生时代的最后绝唱,
将成为书写未来的最后篇章。
纯真年代已经过去,
我们穿着校服的日子即将成为回忆。
一起欢声笑语的时光,
荡漾于属于我们的教室;
一起克难攻坚的同学,
永存于属于成功的喜悦。
曾经在你心里驻足过的那个男孩和姑娘,
或是正在陪在你身边的那个ta,
会不会被你忘记,
多年以后你能否记得这段快活的日子。
在这年华的最后一段时间里,
我们穷日落月,奋笔疾书,执经叩问,
为的是考场上的一支黑笔,
一支笔在白纸上答别人所问,
一支笔在梦想中扬帆起航。
李华笑着请你帮他写下最后一篇文章,
留下“诚挚的,李华”;
带电粒子飞速越过加速电场,
在磁场中偏转出优美的轨迹。
曾经过去的,我们不会淡忘;
童年的欢乐终将过去,
学生的纯真尘封回忆。
我们不能成为脖子向后拧的人,
但过 ...
邂逅星星
邂逅星星
一场烟花的盛会,在星空下上演,华丽的上场,孤寂的落幕。
一、序言
群星在暗夜的银河中闪耀。
从第一个人第一次仰望璀璨的星空开始,仅仅经过一颗小小铀235原子半衰期的十分之一,曾经身披兽皮的灵长类动物已经成为一颗中等固态行星的主人。
从古代的星空之神阿斯特赖俄斯,至第一颗笨重的化学火箭深入宇宙空间,人类对于头顶的世界一直都有着无法动摇的追求。
纵使技术水平依旧停留在用着核能烧开水的地步,这颗星球上的每一个人民都有着最朴素的愿望,每一个强盛的国家都有着向着深空进军的梦想。
牛顿说:宇宙就像一个永恒不变的精密钟表。他提出了人类的第一个完美的结论,人们第一次得知了每一颗星星都有他们的归宿。
再后来,爱因斯坦说:物质告诉时空如何弯曲,时空告诉物质如何运动。他打破时间与空间的枷锁,第一次把人们带入了现代物理的大门。
正因为无论在哪里、无论在什么时间,这些基本法则都一样,才能够用它指出宇宙的过去和未来。
宇宙的一生对我们何其广阔。
距离我们1亿5千万千米的那个恒星,在我们来到这个世界前已经燃烧了45.7亿年;
每75年路过我们身边的白色尾迹,在我们了解他之前已经造访过5000万次。 ...
动态规划入门
动态规划入门
**动态规划(英语:Dynamic programming,简称DP)**是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
——维基百科
观前提示:本文需要一定的算法基础,包括但不限于递推、搜索、回溯、递归。
如果说递归是算法学习面临的第一道门槛,那么动态规划就是第二道门槛。这两者的学习都有一个相似的特点——抽象。
下面这篇文章是笔者认为最好理解入门动态规划的路线与方式。
笔者虽然比较喜欢用Python,但是不可否认C在效率方面比Python快得多,且竞赛也大多使用C,因此本文代码也用C++写。
(不过如果学习了Python,应该也不难理解)
——————————————————————————掉头发的分割线————————————————————————
网上很多教程以01背包开始动态规划的第一堂课,笔者私以为这是不太合理的。
固然,开始学习动态规划时大家大多已经学会了DFS(深度优先搜索)和回 ...
2022年优雅地使用桌面Linux
2022年优雅地使用桌面Linux
本文有效期限于2022.03.23
从1990年Linux诞生的那一刻,一个属于开源的时代终将出现.
大概三年前,博主第一次尝试在桌面端使用Linux。毋庸置疑的是在服务器上的主流操作系统Linux已经占了上风,但是在桌面操作系统上,无论是生态、硬件支持、日常使用体验上都远远不如Windows和macOS。
最有典型代表的就是安装无论哪个发行版都需要的操作——换源。三四年前,Ubuntu换源需要自行修改apt的conf文件、选定最快的源、刷新索引、导入密钥等等。
而现如今在ArchLinux上:
只需要一行命令,就可以自动帮你选择最快的源并自动设置。而我在这三年中没少用Linux,见证着这一步步的发展,也看见了Linux逐渐向普通用户靠近的过程。
现在已经是2022年了,随着国产基于Linux的操作系统UOS、Deepin、麒麟V20等逐渐在一些家用机上的普及,我相信中国Linux桌面操作系统的元年终将到来。
随着国产操作系统的完善,Windows或许有一天真的会被取代,这时学习一些Linux的知识也还及时。
博主已经完全转向Linux有三个月了 ...
博客于我之精神——记于博客4万字
博客于我之精神——记于博客4万字
写这篇文章之前,博客总字数已达39,983字,姑且算他四万字吧(战术仰头)
博客究竟与我有何作用,估计是我自己也说不清的。无非便是三个词**“宣泄、记录和交流”**。
为何要“博”?
或许有人认为是“博”他人之关注,但明显总阅读量不超4000次的我并不是如此(笑)。
显示自己的写作才能?姑且把我的这两篇自己的情感经历故事算在内,文笔是没有的,情感是真挚的。
是因为我们有各种各样的想法,我们要把这些想法表达出来宣泄出来。
支离破碎,杂乱无章,甚至面目全非,消失无踪的自我释放?
把每次的感受、学习所获得的之满足,整理出来,所获得的的与我自己不再是自我释放,是思想得以碰撞、得以延伸的满足感。
每次的对于这个世界,对于自己人生,对于自己学习感悟,在每篇博客上都留下一些思考的划痕。
生活中每天的的事情都会引起我们的思考,生命中的每天都会留下些什么。博客能让我们自己生活不再浑浑噩噩,时光不再流逝无痕。记录生活,在自己的每一天上留下思考的划痕。
不求获得更高的高度,但求获得自己的认知。几乎我的每篇文章都会有类似感言、总结之类的话语。
在Manjaro初体验-w ...