数据结构学习
基于Java的数据结构学习
逍遥自在”
这个作者很懒,什么都没留下…
展开
-
POJ1287 (最小生成树) 中文版
问题描述: 您被分配在广域内的某些点之间设计网络连接。在该区域中为您提供了一组点,以及可能连接成对点的电缆的一组可能路线。对于两点之间的每条可能路线,将为您提供在该路线上连接各点所需的电缆长度。请注意,两个给定点之间可能存在许多可能的路线。假定给定的可能路线(直接或间接)连接区域中的每两个点。 您的任务是设计该区域的网络,以使每两个点之间都具有连接(直接或间接)(即,所有点都是互连的,但不一定是通过直接电缆),并且总长度为使用的电缆极少。输入量: 输入文件由许多数据集组成。每个数据集定义一个所原创 2020-06-15 12:20:14 · 910 阅读 · 0 评论 -
求图中的最短路径问题
文章目录单源最短路径Dijistra算法多源最短路径方法一:每次以一个顶点为源点,重复执行Dijkstra算法n次。方法二:弗洛伊德(Floyd)算法单源最短路径求从某一节点出发到其他所有节点的最短路径Dijistra算法 Dijistra算法,最主要的思想就是:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离。 算法需要用到两个集合,S集合和T集合,S集合用于存储已经确定出最短路径的节点,T集合用于存储还没有确定出最短路径的节点。 Dijistra算法的时间复杂度为n的平原创 2020-06-14 17:37:35 · 1228 阅读 · 0 评论 -
最小生成树之KruskaI算法,用并查集判断是否有环
最小生成树的概念:➢连通图去一条边就是树➢所有生成树中边的权重和最小的,称之为最小生成树( Minimal Spanning Tree )➢常用于网络构建等建设性问题的优化算法实现思路:先将带权的边进行升序排序。按照从小到大的顺序取出边,拿的时候判断边所连接的两个节点是否在同一个集合,如果两个节点不在一个集合则放弃这一条边,开始下一条边的判断。(这是为了避免出现环)。刚开始时,每一个节点都是一个独立的集合,到取出一条边时,将这条边对应的两个顶点对应的两个集合合并成一个集合。加上第二步原创 2020-06-14 12:19:52 · 2964 阅读 · 2 评论 -
图的着色问题(二分图)
相关概念:把相邻顶点染成不同颜色的问题叫做图的着色问题。➢对图进行染色所需的最小颜色数,称为最小着色数。最小着色数为2的图称为二分图。➢二分图:给定一个具有n个顶点的图,要给图上每个顶点染色,并且要使相邻的顶点的颜色不同、问是否最多用2种颜色进行染色?没有重边(相邻的两个顶点有两条边)和自环。解题思路: 用邻接表进行对图的表示,这样方便查找点的相邻顶点。深搜遍历每一个点,依次尝试每一种颜色;在深搜的过程中记录已标记的颜色。代码如下:邻接表类:import java.util.Arra原创 2020-06-11 12:07:48 · 4158 阅读 · 0 评论 -
七桥问题和欧拉道路
问题的引出➢柯尼斯堡七桥问题( Seven Bridges of Konigsberg )是图论中的著名问题。这个问题是基于一个现实生活中的事例:当时东普鲁士柯尼斯堡(今日俄罗斯加里宁格勒)市区跨普列戈利亚河两岸,河中心有两个小岛。小岛与河的两岸有七条桥连接。在所有桥都只能走一遍的前提下,如何才能把这个地方所有的桥都走遍?➢能否从无向图中的一个结点出发走出一条道路,每条边恰好经过一次,这样的路线称为欧拉道路(一笔画 )。基本定义和规律➢如果一个无向图是连通的,且最多只有两个奇点(度数为奇数),原创 2020-06-11 09:30:08 · 1475 阅读 · 0 评论 -
Java实现拓扑排序
拓扑排序的介绍:拓扑排序:将有向图中的顶点以线性方式进行排序。即对于任何自顶点u到顶点v的有向边u->v ,在最后的排序结果中,顶点u总是在顶点v的前面。这样的排序结果,称为拓扑序。有环图,不存在拓扑排序。对于一个有向图,可能有多个拓扑排序的结果。如下图的拓扑排序有两种情况:1->2->3->4->51->2->3->5->4拓扑排序的代码实现:要实现拓扑排序的有向图:实现思路:将有向图转化为邻接矩阵,方便查找两个点之间是否原创 2020-06-09 22:33:49 · 1194 阅读 · 0 评论 -
深搜解决统计八连通块个数
问题描述: 输入一个m行n列的字符矩阵,统计字符“@"组成多少个八连块。如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),就说它们属于同一个八连块。测试数据:*@@*@**@*@****@ @@@*@ @@**@输出应为:3解题思路: 遍历每一个点,当遇到符号时就跳过,用DFS对每一个点进行深搜遍历,在深搜过程中将遇到的@符号转换为,每完成一个块的遍历统计次数就加一。由于八个方向中一个相邻就算连通,所以深搜树的每一个节点有八个分支。代码如下:import java.原创 2020-06-08 16:58:22 · 1554 阅读 · 0 评论 -
用深搜解决图论四连通检测问题
问题描述: 给定一个方阵,定义连通性:上下左右相邻,并且值相同。可以想象一张地图,不同的区域被染成了不同的颜色。现在我们需要判断图中任意两点是否在同一个连通区间中。输入:整数N(N<50),代表矩阵的行列数输入N行,每行N个字符,代表矩阵中的元素输入一个整数M(M<1000)表示询问次数输入M行每行代表一个询问,格式为4个整数x1 y1 x2 y2,代表需要检测的点输出:true或false测试数据:100 0 1 0 0 0 0 0 0 00 0 1 1原创 2020-06-07 19:19:46 · 753 阅读 · 0 评论 -
图论算法学习
图的基本概念和术语定义和基本术语➢图( graph)是种网状数据结构 ,图是由非空的顶点集合和一个描述顶点之间关系的集合组成。➢图由顶点和边组成,顶点表示对象,边表示两个对象间的连接关系。➢图大体分两种,边没有指向性的叫无向图,边具有指向性的叫有向图。➢边可以带权值,称为带权图。无向图术语➢两个顶点之间如果有边连接,视为两个顶点相邻➢相邻顶点的序列称为路径➢起点和终点重合的路径称为圈➢任意两点之间都存在路径连接的图称为连通图➢顶点连接的边数叫做这个顶点的度树和图的原创 2020-06-07 17:12:07 · 1629 阅读 · 0 评论 -
java 二叉树创建、遍历、查找和删除
树的节点类:public class TreeNode { int value; //树的权值 TreeNode leftNode; //左孩子 TreeNode rightNode; //右孩子 public TreeNode(int value){ this.value = value; } public void setLeftNode(TreeNode left...原创 2020-04-30 12:18:29 · 1029 阅读 · 0 评论 -
字符串匹配 KMP算法
问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置。一般处理这种问题往往采用简单粗暴的方法——暴力匹配法。所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹配。但暴力匹配效率比较低,经典算法KMP效率更高。例:主串s=“abcdeabcdxabc”,模式串p=“abcdx”。结果应该返回5。暴力匹配的图解如下:代码如下:public clas...原创 2020-02-06 13:30:14 · 1013 阅读 · 0 评论 -
二叉树的基本性质和特殊的二叉树、B树
二叉树的定义: ➢每个结点的度均不超过2的有序树,称为二叉树( binary tree )。 ➢与树的递归定义类似,二叉树的递归定义如下:二叉树或者是一棵空树,或者是一-棵由一个根结点和两棵互不相交的分别称为根的左子树和右子树的子树所组成的非空树。二叉树的性质:➢在二叉树的第i层上最多有2^i个结点。➢高度为h的二叉树至多有2^(h+1)-1个结点。➢对任何一棵二-叉树T ,如果...原创 2020-04-26 08:25:00 · 1258 阅读 · 0 评论 -
树的基本概念和基本功能实现 java
树的定义和基本术语:➢树是由一个集合以及在该集合上定义的一种关系构成的。➢集合中的元素称为树的结点,所定义的关系称为父子关系。➢父子关系在树的结点之间建立了一个层次结构。➢在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或简称为树根。节点的层次和树的深度:➢结点的层次( level )从根开始定义,层次数为0的结点是根结点其子树的根的层次数为1…➢树中结点的最...原创 2020-04-24 21:30:28 · 1037 阅读 · 0 评论