摘要:
并查集算法 并查集算法是一个利用结点关系,进行分类合组的算法 简介 并查集可以通过一个一维数组来实现 我们把每一个点视作一个"独立的,只有一个结点"的树 之后我们可以通过一些条件,逐渐将这些树合并成一棵大树 合并的过程,其实就是找统一的父节点的过程,我们可以自定两条原则: 1.相异的情况下,把右边的 阅读全文
摘要:
二叉树与堆 二叉树是一种特殊的、常见的树 简介 二叉树的特点在于每个结点最多只有两个儿子 如果要使用更严格的递归定义,则是: 二叉树要么为空,要么由根结点、左子树、右子树组成 而左子树、右子树分别是一棵二叉树 二叉树是使用范围极广的树,一棵多叉树也可以转换为二叉树 二叉树类型 满二叉树:如果二叉树中 阅读全文
摘要:
树的基本介绍 介绍 树其实就是不包含回路的连通无向图 因为这个特点,我们为树赋予了这些特性: 1.一棵树中的任意两个结点,有且仅有唯一的一条路径连通 2.一棵树如果有n个结点,那么它一定恰好有n-1条边 3.在一棵树中,加上一条边,那么就会得到一个回路 树是指任意两个结点间有且仅有一条路径的无向图 阅读全文
摘要:
Bellman-Ford优化 我们知道,在最开始的算法中,我们每一次操作后就会进行一次松弛的判断 实际上,这浪费了我们的时间:每次操作后有些顶点的最短路就不会变化了 实际上我们可以这样做:每次仅仅对最短路的估计值发生了变化的顶点的所有出边执行松弛操作 实操 我们可以利用队列来维护这些点 我们每次都选 阅读全文
摘要:
Bellman-Ford算法 很强的一个算法,无论是思路、思想、代码实现都很优秀 而且,它可以解决负权边的问题 简介 一句话概括这个算法就是:“对所有的边进行n-1次松弛操作” 一样的,我们用uvw三者表示“从顶点u[i]到顶点v[i]的这条边,权值为w[i]” 随后检查,新的距离会不会比原本的距离 阅读全文
摘要:
Dijkstra算法——单源最短路径 Dijkstra算法是用来处理"指定一个点,计算该点到其余各个顶点的最短路径"这件事 简介 和上文有点像,因为当我们讨论一点到各个点的距离的时候,我们就不得不计算各种中转站 我们这里得到了一个新定义,松弛,我们认为它是: 如果两点距离通过中转点缩短了距离,我们就 阅读全文
摘要:
Floyd-Warshall算法 只有五行核心的算法 简介 假设我们有四个点。每个点之间都有一定的距离,或者甚至没有路 现在我们想要知道如何获得两点之间的最短路径 使用之前说的深度优先或者宽度优先当然是可以的,不过有没有更好的办法? 于是我们使用了Floyd-Warshall,先进了一些的算法 算法 阅读全文
摘要:
图的简介与二维数组 图就是由顶点和连接顶点的边组成的 表示图 我们利用二维数组表示图 二维数组的两个参数行列,均表示顶点,二者相交得到的即是距离 我们用正无穷(一般可以用999999代替)表示二者之间没有边,0是某点到自身的距离 比如e[a][b] = 3 ;就代表a到b的距离是3 图还分为有向图和 阅读全文
摘要:
水管连接 题干 我们有一张N*M大小的地图 我们想要把水管从 (1,1)的铺设起点 铺到 (N,M)的铺设终点 其中我们有两种水管,弯管和直管,他们都可以自由地90°旋转 其中弯管可以连接上下左右任意两个相邻位置,直管则连接相对位置 计算连接方式,如果可以连接则输出路径,否则输出impossible 阅读全文