随笔分类 - 【8】数据结构
摘要:题目描述: 思路: 分酒,迷宫这些都是没有明显节点的图,不像城市建设网络这样子具有明显的节点,但是它是一种隐式的图,解决这类题目需要将它转换成图论来解决。这道题涉及的是状态转移,一个状态经过一次操作可能演变成另外一种状态,利用宽度优先搜索的话可以求解出从原始状态到目标状态需要经历的最少的步骤,宽度优
阅读全文
摘要:题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题。 Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离。此后不再关心前面已经确定的“最短距离已经确定的点”。 Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短
阅读全文
摘要:题目: 最短路:给定两个顶点,在以这两个点为起点和终点的路径中,边的权值和最小的路径。考虑权值为点之间的距离。 单源最短路问题,Bellman-ford算法 思路:每次循环检查所有边,可优化。 应用于旅游等路径最小问题。 代码: 对于上一个代码。可以先把边集提取出来,这样不用每次扫描二维数组。 Ed
阅读全文
摘要:学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树。 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加
阅读全文
摘要:一、问题描述 给定一个具有n个顶点的图,要给图上每个顶点染色并且要使相邻的顶点的颜色不同,问是否最多用2种颜色进行染色?没有重边和自环。把相邻顶点染成不同颜色的问题叫做图的着色问题。对图进行染色所需的最小颜色数,称为最小着色数。最小着色数为2的图称为二分图,如下图所示就是一个二分图。下面代码是用来判
阅读全文
摘要:一、问题描述 根据图上描述,事实上一步走完是不可能的。可以用如下性质来判断欧拉回路与欧拉道路。 1、如果一个无向图是连通的,且最多只有两个并且最少要包含一个奇点(度数为奇数),则一定存在欧拉道路。 2、如果有两个奇点,它们必须是起点和终点。 3、如果奇点不存在,可以从任意点出发,最终一定会回到该点,
阅读全文
摘要:一、定义: 没有圈的有向图,叫做DAG(Directed Acyclic Graph,有向无环图) 拓扑排序定义:将DAG中的顶点以线性方式进行排序。即对于任何自顶点u到顶点v的有向边u->v,在最后的排序结果中,顶点u总是在顶点v的前面。这样的排序结果,称为拓扑序。有环图,不存在拓扑排序。 二、拓
阅读全文
摘要:题目描述: 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。 如果两个字符“@”所在的格子相邻(横、竖或者对角线方向),就说它们属于同一个八连块。 思路: 还是使用图的DFS来解决问题,需要注意的都在代码注释里面。 代码:
阅读全文
摘要:题目描述: 给定一个方阵,定义连通:上下左右相邻,并且值相同。可以想象成一张地图,不同的区域被涂以不同颜色。 输入: 整数N, (N<50)表示矩阵的行列数 接下来N行,每行N个字符,代表方阵中的元素 接下来一个整数M,(M<1000)表示询问数 接下来M行,每行代表一个询问, 格式为4个整数,y1
阅读全文
摘要:一、图的表示 从图的逻辑结构定义来看,无法将图中的顶点排列成一个唯一的线性序列。在图中任意一个顶点都可以看成是图的第一个顶点,对任何一个顶点而言,它的邻接点之间也不存在顺序关系。为了方便存储和操作,需要将图中的顶点按一定的序列排列起来。 顶点在图中的位置就是指该顶点在人为确定的序列中的位置。 由于图
阅读全文
摘要:一、基本概念 图(graph)是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成。 图由顶点和边组成,顶点表示对象,边表示两个对象间的连接关系。 图大体分为两种,边没有指向性的叫无向图,边具有指向性的叫有向图。 方向起始的顶点称为起点或尾(弧尾)。方向指向的顶点称为终点或头(弧
阅读全文
摘要:题目: 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶子结点所经过的结点形成一条路径。这里只讨论简化版本,原题目的意思是路径不限制。 思路: 这种题目经过前面的学习很容易看出使用dfs来解决。这里还使用到了带前缀的dfs,可以和
阅读全文
摘要:一、问题 求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树)。最近公共祖先简称LCA(Lowest Common Ancestor)。例如,如下图一棵普通的二叉树。 结点3和结点4的最近公共祖先是结点2,即LCA(3,4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结
阅读全文
摘要:问题: 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。注意这里没有parent指针。 思路: 本
阅读全文
摘要:对于树的访问先是从根节点开始进行的,递归左子树和右子树,对于左子树和右子树又可以看成是一棵子树继续递归下去,访问根节点的时候它不是直接处理根节点的而是需要等待它的左子树调用完之后那么才进行处理的,左子树也是一样,当访问到它的左子树的时候也需要等待它的左子树处理完毕才处理自己。 这也就是先访问,后出现
阅读全文
摘要:题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点(不存在重复数据)。树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路: 如果当前节点有右孩子,则下一个节点是右孩子中最左子节点。如果当前节点是其父节点的左子节点,则下一个节点就是父节点(节点没有右孩子)。如果当前节点
阅读全文
摘要:一、问题: 请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。 二、思路: 解法一:从根节点开始遍历二叉树,其中需要使用到递归进行遍历节点,判断根的左右节点的值与根节点的值的大小的比较,其中递归的思路是假如树
阅读全文
摘要:题目一: 求一个二叉树的最小深度。 TreeNode类: public class TreeNode<T> { public T val; public TreeNode<T> left = null; public TreeNode<T> right = null; public TreeNode
阅读全文
摘要:一、Trie简介 在计算机科学中,Trie,又称字典树、前缀树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较
阅读全文