- 博客(217)
- 收藏
- 关注
原创 6.11.各顶点间的最短路径问题-Floyd算法
对于Floyd算法,采用了动态规划的思想,核心内容是把一个大问题拆分为多个小问题再进行求解,每一个小问题之间有一个递进的关系,比如本篇中的Floyd算法,若求每一对顶点之间的最短路径,首先会把该问题分为n个阶段求解,求解的是对于任意一对顶点即Vi->Vj之间的最短路径,首先设置一个初始阶段:该阶段不允许Vi->Vj之间的路径存在其他的中转顶点;第二个阶段:会考虑如果允许v0顶点作为Vi->Vj之间的中转顶点,那么Vi->Vj之间的最短路径会不会有进一步的优化;
2025-05-02 19:06:50
878
原创 6.10.单源最短路径问题-Dijkstra算法
以上述图片为例来解释Dijkstra算法,其中的图是有向图,之所以不使用无向图,是因为无向图与有向图的原理一致,无向图的一条无向边就对应有向图的两条有向边,
2025-05-02 18:58:24
510
原创 6.9.单源最短路径问题-BFS算法
以上述图片为例,比如从G港到Y城,可以是G港->R城->Y城,也可以是G港->P城->Y城等,有很多条路径都可以实现从G港到Y城,但要从中找出G港到Y城距离最短的那一条路径,这就是单源最短路径问题。单源最短路径问题就是只有一个源头,从该源头出发,到达其他任意一个顶点可以走的最短路径。对于单源最短路径的题型,需要掌握BFS算法(可以求无权图的单源最短路径)和Dijkstra算法(可以求带权图和无权图的单源最短路径)。
2025-05-02 18:50:22
1067
原创 4.换行和续写
假设在本地文件中要输出数据aweihaoshuai 666,在输出这个数据时要换行写出,如下图:假设在一个文本文件中已经存在数据aweihaoshuai,如果此时再次写入数据如diyishuai,若不想把原来的数据清空,而是想接着写即续写,如下图:(按照之前的写法使用write方法写出数据会把原有的数据清空再写出数据)将数据写入文本文件的过程中,要想实现换行,只需要写出一个换行符即可(注意:不同的操作系统中换行符是不同的)。对于Windows操作系统,以下图为例:Windows操作系统的换行符是\r\n,叫
2025-04-26 15:38:15
862
原创 6.8.最小生成树
假设有一个城市叫P城,P城周围规划了学校、农场、电站、渔村、矿场,各个地方之间有上图所示的修路方案,其中数字表示修路的成本,比如修一条P城和学校之间的路需要1块钱,修一条学校和矿场之间的路需要5块钱,现在为了节省P城的财政支出,没有必要把所有的可行的道路都修一遍,因此需要制定一个修路方案,这个方案要求所有地方都是连通的即各个地方之间是相互可到达的(各个地方之间不一定是相邻的),但是成本又必须降到最低,此时有如下两种方案:左边的方案可以使得各个地方连通,代价是20块钱(图片打错了);
2025-04-18 23:13:20
770
原创 6.7.图的深度优先遍历(英文缩写DFS)
假设图使用了邻接矩阵或者邻接表存储,如上图,邻接表中各个链表中顶点号都是从左向右递增的,因此,对于某一个顶点,要找到与该顶点相邻的其他顶点,在该邻接表中找到的顺序与左边的邻接矩阵找到的顺序是一致的,因为邻接矩阵的顶点号也是从左向右递增的。下图的两个例子都是从2号顶点开始深度优先遍历图,左边的例子基于之前第一个邻接表,右边的例子基于之前第二个邻接表,由于邻接表的不同,即使从同一个顶点开始深度优先遍历,得到的遍历序列也可能不同,:深度优先遍历的过程中也是在探索各条边所连接的顶点的过程,
2025-04-18 22:58:08
789
原创 6.综合练习1-创建文件
题目要求是"在当前模块下的aaa文件夹",此时在左侧的目录中,是没有aaa文件夹的,所以要先创建a.txt文件的父级路径aaa文件夹,由于是在当前模块下操作,所以用相对路径(不带磁盘的路径)即可->注:这里不需要调用exists方法判断aaa文件夹是否存在,因为如果要创建的aaa文件夹已经存在,那么会创建失败,方法mkdirs返回false,如果aaa文件夹不存在,才会成功创建,方法mkdirs返回true。上述图片中,此时左边的目录中就会有aaa文件夹,该文件夹中会有一个a.txt文件。
2025-04-08 18:49:40
472
原创 8.方法引用综合小练习2-获取部分属性并收集到数组
首先要明确一点:map方法中所做的操作并没有创建Student对象,因此map方法中使用方法引用的话不能引用构造方法,这里可以直接使用引用静态方法改写,因为map方法在main方法里,main方法是静态的。->因此可以用stream流里的map方法把集合中的学生对象转换为姓名即字符串型(注:这不是过滤元素,不能用filter方法),再使用toArray方法收集到数组中。题目要求是"只获取姓名并放到数组当中",
2025-04-08 18:25:37
135
原创 9.C语言的常量
,比如'A','b','1'和'!'->注:单引号里的字符必须写一个,字符只能是大小写英文字母、数字或英文符号(空格也算英文符号即' ')比如:整型常量123可以用于计算,而字符串常量"123"就不能用于计算,如果仅仅只是展示,整型常量123和字符串常量"123"都可以。''虽然有单引号,但没有大小写字母、数字或英文符号中的任意一个,且长度不为1,因此就不是字符。' '里面有一个空格,空格属于英文符号,而且有单引号,所以是字符常量。'¥'这个不是字符,虽然有单引号且长度为1,但¥是$的中文符号。
2025-04-06 13:22:36
270
原创 6.5.图的基本操作
邻接矩阵以上述图片为例,例如要找C顶点除当前邻接点的下一个邻接点,可以扫描C行的数据(也可以扫描C列的数据,因为此时是无向图,邻接矩阵是对称的),直到找到除当前邻接点的下一个1,就找到了C顶点除当前邻接点的下一个邻接点,假设C顶点当前的邻接点为A顶点,邻接矩阵中A顶点之后的下一个为1的数据对应的顶点是E顶点,所以顶点C除当前邻接点A的下一个邻接点是E顶点。
2025-04-05 21:42:05
838
原创 3.字节输出流FileOutputStream写出数据的三种方式
上述图片的第三个write方法是只把b数组里的一部分数据写到指定文件中->第一个参数byte[] b就是装着要输出的数据的数组;第二个参数int off是起始索引;第三个参数int len表示要截取的个数->比如起始索引off为0,len为3,表示要写出的数据是从b数组里的0索引开始,一共写3个数据。上述图片的第二个write方法用于一次写出多个字节数据,其中需要把要写出的数据先放到一个byte类型的数组中,再把整个byte数组中的数据写到文件中->顺序是把byte数组里的元素依次写入指定文件中。
2025-04-05 21:30:56
484
原创 2.IO流的体系和字节输出流FileOutputStream的基本用法
父类对应的子类对应的子类对应的子类InputStream类FileInputStream类:File代表作用即操作本地文件的字节输入流,InputStream就是FileInputStream的父类ObjectInputStream类:Object是作用即操作对象的字节输入流, InputStream就是ObjectInputStream的父类。
2025-04-05 21:20:57
1047
原创 7.注释扩展知识点
在写注释的时候会发现一个问题,无论在写单行注释时,还是写多行注释时,注释的格式"//"和"/* */"都是手动写上去的,那如果不想要该注释了,也是手动删除,这样太麻烦->因此可以通过快捷键实现快速注释和取消注释。加注释的快捷键:ctrl+K,ctrl+C(这两个快捷键组合使用,可单行注释,可多行注释)或者ctrl+/(仅单行注释)或者ctrl+shifr+/(仅多行注释);取消注释的快捷键:ctrl+K,ctrl+U(这两个快捷键组合使用)。如下图,没有加单行注释前:如上图,如果要加单行注释,一定要先点一下
2025-04-02 13:19:21
756
原创 Visual Studio 2022中打开其他项目的步骤
因此一定要找到VS项目才可以在Visual Studio 2022中进行操作与运行。此时在右侧的目录中是没有源文件的,意味着无法运行。此时右侧的目录中有源文件,是可以运行的。
2025-03-28 16:43:26
468
原创 6.注释的基本使用
如果注释的内容比较多,一行写不下,就可以使用多行注释VS中写多行注释时先写一个/*,编译器VS会自动生成后半个 */选中要注释的内容,再ctrl+shift+/可把要注释的内容进行多行注释alt+鼠标左键:实现竖着勾画ctrl+滑轮:可修改视野单行注释:多行注释:三.注释的设置:在VS中,使用ctrl+滑轮可修改视野,但这类修改是暂时的,如果想要变成永久的,该怎么办呢?而且如果觉得注释里的字体不好看,该如何修改字体呢?未修改前:步骤:VS上方的"工具"->"选项,进入"选项"界面:打开"环境"的
2025-03-24 13:16:15
185
原创 5.HelloWorld执行流程分析
选中项目HelloWorld2的名称->鼠标右键点击该名称->在文件资源管理器中打开文件夹:其实就是打开本地文件夹。运行上述代码时编译器底层做了许多处理,通常只需要关注编写代码和运行代码即可。其中只有一个后缀名为c的文件,没有编译之后的obj文件和exe文件。所以针对一个C程序而言,完整的执行过程如上述。
2025-03-21 12:05:50
288
原创 4.HelloWorld代码分析
预处理#include<stdio.h>:表示提前找到stdio.h这个文件C语言程序的主入口:main函数(必须是main函数,名字不能变)printf是输出语句,要结合库函数#include<stdio.h>使用。
2025-03-20 22:06:51
302
原创 3.VS的使用与第一个程序Hello World(vs版)
无论是Java、Python、C、PHP等语言,第一个程序都是写Hello World,这是因为C语言之父丹尼斯 里奇写了一本书籍《C程序设计语言》中第一个程序就是展示Hello World,所以之后的编程语言都延续了这个传统,把Hello World当作是入门的第一个代码。
2025-03-20 22:02:37
696
原创 2.C语言编译器环境搭建
直接在腾讯电脑管家就可以下载,但版本可能比较低;其中Microsoft是微软公司,指的是VS是微软公司发布的,Visual Studio就是该编译器的名称,2022是版本号,版本号不固定,但一般选择最稳定的版本中最新的其中Microsoft是微软公司,指的是VC是微软公司发布的, Visual C++就是该编译器的名称,2010是版本号,版本号不固定,但一般选择最稳定的版本中最新的对于编译器的选择:Dev-C++适合日常编程如果是应付各种考试,可以选择Microsoft Visual C++ 2010(学习
2025-03-18 15:51:44
1009
原创 1.C语言开篇
例如此时要看电脑里的一个视频,此时就要用到计算机语言操作计算机,而不是对电脑喊,但一般看视频时用视频播放器即可,也没有用到计算机语言啊,实际上我们接触到的所有软件都是已经写好的代码,而这些代码就是计算机语言,只不过是程序员把这些代码即计算机语言打包起来了才形成了软件供用户使用。
2025-03-18 15:44:26
294
原创 6.引用数组的构造方法
这里要引用数组的构造方法,所以返回值就不要考虑了,只需要引用的方法结束后创建一个Integer型数组的对象即可,这里直接引用Integer类的构造方法就行,因为Integer类的构造方法结束后就会自动创建Integer类对象,本例中toArray方法里的apply方法的形参是整型,返回值是Integer[],功能是创建一个Integer类型的数组,长度与流中数据的个数一样,并把流里的数据放到创建的这个数组中,引用数组的构造方法的目的是创建一个指定类型的数组对象。集合中存储一些整数,收集到数组当中。
2025-03-17 13:11:59
267
原创 5.类名引用成员方法
决定了可以引用哪些类中的方法,也就是说使用当前方式进行方法引用,不是所有类里的方法都能引用,这个类是有规定的,这个主要决定于第一个形参(在之前学的引用其他类的成员方法中,该方式可以引用所有类的成员方法,只需要获取到那个类的对象,再进行方法引用即可)。注:这种方法引用带有局限性,不能引用所有类中的成员方法,能引用的方法和抽象方法的第一个参数有关,第一个参数是什么类型的,那么就只能引用这个类中的方法。方法引用的前提条件之一:被引用的方法的形参和返回值,需要和抽象方法的形参和返回值保持一致,
2025-03-17 13:09:41
704
原创 4.引用构造方法
>3和4.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致,而且被引用的方法的功能需要满足当前的需求,这里要注意的是:此时引用的是构造方法,引用构造方法时就不需要考虑方法的返回值了,此时的抽象方法指的是apply方法,apply方法的形参类型是String型,作用是实现将数据封装成Student对象,但在Student类里并没有形参类型是String型、作用是实现将数据封装成Student对象的构造方法,不符合,3.被引用的方法的形参和返回值,需要跟抽象方法的形参和返回值保持一致;
2025-03-17 13:07:34
840
原创 3.引用成员方法
/* go对象起初只被定义在initView方法中,但需求中在actionPerformed方法中也需要用到go对象,而且在运行时需要initView方法比actionPerformed方法先运行,意味着如果actionPerformed方法此时要想用到go对象,就必须从initView方法中获取,此时只能通过形参传递go对象,但actionPerformed方法是Java已经写好的,而且是被重写的,Java写actionPerformed方法时形参中没有关于go对象的,
2025-03-14 13:31:25
627
原创 19.包装类
包装类就是把基本数据类型转换为对象(引用数据类型)上述图片中前三个得到进制的方法的返回值都是String型,而不是整型,原因:1.比如二进制可能有01010101,但如果是整型,整数中0是不能做开头的,这就出现了局限性;2.整型中long型和int型是有长度限制的,以int型为例,int型最多只能取到21个亿,也就是int类型最多只能有10位,而二进制可能有30多位、40多位和50多位,所以int型可能装不下,long型同理,只有String型可以,这也就是为什么返回String型。
2025-03-14 13:22:20
754
原创 绝对路径和相对路径
第一个是绝对路径,第二个是文件名,第三个是来自内容根的路径即相对路径,点击所要的即可复制:(切记:路径之间递进要用\\分隔,例如上述图片中第三个来自内容根的路径此时是imagine/Go.jpg,需要修改为imagine\\Go.jpg)比如做项目的过程中要用到图片,通常会把图片的路径设置为相对路径,这是因为项目通常需要多台机器完善,意味着需要相对路径的灵活性,而绝对路径就可能出现路径查找失败。绝对路径能更精确的指明当前内容的位置,而且绝对路径具有独立性,不受工作目录影响。
2025-03-12 19:51:47
351
原创 5.Stream流的终结方法中的收集方法collect超详解
收集方法collect可以收集流中的数据,大多放到单列集合和双列集合中(单列集合包括List集合、Set集合,双列集合包括Map集合)。注:双列集合Map的键不能重复,值可以重复,因此使用collect方法将数据收集到Map集合中一定要保证键不重复,如果键重复了打印Map集合等操作会报错。
2025-03-09 14:05:31
899
原创 2.引用静态方法
Function接口中的抽象方法是apply方法,在map方法中已经对apply方法进行了重写,map方法里的apply方法的形参只有一个,且该形参类型是String型,apply方法的返回值是Integer型,apply方法的功能是把形参的字符串转化为整数。上述图片中Integer是整型的包装类,parseInt是Integer类里的静态方法,parseInt方法的作用是把字符串转为整数,parseInt是静态的,可以类名.方法名进行调用,也可以使用类名::静态方法名(方法引用)进行调用。
2025-03-03 13:29:25
844
原创 15.综合练习2-带有概率的随机点名
要想解决本例中随机面即概率的问题,可以在集合中添加7个1和3个0(总共就是10个数),此时7个1在集合中占70%,3个0在集合中占30%,然后可以把集合中的1和0都打乱顺序,再从这个集合中抽1或0,此时抽中1的概率为70%,抽中0的概率为30%注:题目的要求是70%的概率随机到男生,30%的概率随机到女生,这里概率针对的是男生和女生,和男生、女生的姓名无关,因此在满足题目要求下对男生、女生的姓名进行随机抽取是不影响本题的。->此时抽中男生的概率为70%,抽中女生的概率为30%。
2025-03-03 13:13:39
377
原创 4.Stream流的终结方法
2.count方法的返回值为整型,意味着调用完count方法后不能再调用其他方法;Consumer的泛型类型必须与accept方法的形参s的数据类型保持一致;<A[]>是一个函数式接口:可以用lambda表达式进行优化。accept方法的方法体:即对每一个数据的处理操作如打印;accept方法的形参s:依次表示流里面的每一个数据;Consumer的泛型:表示流中数据的类型;
2025-02-28 12:37:06
327
原创 13.集合工具类Collections
addAll方法中第一个形参的数据类型为Collection<T>,意味着第一个参数是针对单列集合->所以addAll方法只能给单列集合Collection批量添加元素,双列集合Map是不行的addAll方法中第二个形参T...elements是可变参数,意味着无论添加多少个元素都可以shuffle方法的形参List<?> list的数据类型为List<?>,意味着只能传递List的子类集合即ArrayList集合、LinkedList集合和Vector集合。
2025-02-28 12:23:59
645
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人