随笔分类 - 

摘要:Floyd算法(求所有节点对的最短路径): 首先考虑使用单源最短路径算法重复|V|次,这样的复杂度会达到|V|^4,因为其中有很多重复的运算。 Floyd算法复杂度为|V|^3。 其维护一个二维数组Q,Q[i][j]表示i到j的最短路径长度,如果不存在则为无穷大,若i==j则为0。 然后分别利用节点 阅读全文
posted @ 2020-06-05 15:27 NeoZy 阅读(1144) 评论(0) 推荐(0)
摘要:Dijkstra: 和Bellman-Ford算法都是求单源最短路径的,但Dijkstra算法要求图中没有负权边。 整体思路:集合S包含所有已经找到最短路径的节点,Q集合为没有找到最短路径的节点。 起初Q为V(原始顶点集),S为空集。每次从Q中选取节点v,v满足条件:s到v的路径权和最小。将v从Q中 阅读全文
posted @ 2020-06-03 00:17 NeoZy 阅读(282) 评论(0) 推荐(0)
摘要:struct EdgeNode{ //邻接链表节点 int num; int weigh; EdgeNode* next; EdgeNode():num(0),weigh(0),next(nullptr){} EdgeNode(int x,int w):num(x),weigh(w),next(nu 阅读全文
posted @ 2020-06-02 14:27 NeoZy 阅读(263) 评论(0) 推荐(0)
摘要:强联通分量指的是有向无环图中的一个子图,该子图中任意两个节点i、j,都存在i到j的路径和j到i的路径,换句话,该子图中任意两点有路径可达(不需要直接有边相连,可以通过多条边)。 对于原图G做DFS,每个节点回溯时压到一个栈里。 对原图取转置,记G'。对于G'按之前栈的次序取栈顶进行DFS,每次得到的 阅读全文
posted @ 2020-05-27 00:24 NeoZy 阅读(249) 评论(0) 推荐(0)
摘要:Kruscal原理: 使用贪心算法。先将所有边按照权值从小到大排序,每个点初始都是一个树(一个节点的树)。从前到后遍历边集,对于当前边x-y来说,如果x、y已经在我们的最小生成树里,那么跳过该边。 如果x、y至少有一个不在我们的最小生成树里,将该边加入最小生成树,并且将包含x的树和包含y的树合并为一 阅读全文
posted @ 2020-03-29 22:55 NeoZy 阅读(257) 评论(0) 推荐(0)
摘要:题目: 链接:https://leetcode-cn.com/problems/number-of-connected-components-in-an-undirected-graph/ 给定编号从 0 到 n-1 的 n 个节点和一个无向边列表(每条边都是一对节点),请编写一个函数来计算无向图中 阅读全文
posted @ 2020-03-10 16:28 NeoZy 阅读(1649) 评论(0) 推荐(0)
摘要:题目: 链接:https://leetcode-cn.com/problems/word-ladder-ii/ 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则: 每次转换只能改 阅读全文
posted @ 2020-02-23 18:10 NeoZy 阅读(239) 评论(0) 推荐(0)
摘要:Q: 现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种 阅读全文
posted @ 2019-08-18 19:29 NeoZy 阅读(121) 评论(0) 推荐(0)