1.拓扑排序精讲
题目链接:117. 软件构建
文章讲解:代码随想录
思路:
把有向无环图进行线性排序的算法都可以叫做拓扑排序。
实现拓扑排序的算法有两种:卡恩算法(BFS)和DFS,以下BFS的实现思路。
节点0 的入度为0 出度为2, 也就是没有边指向它,而它有两条边是指出去的。节点的入度表示有多少条边指向它,节点的出度表示有多少条边从该节点出发。做拓扑排序的时候,应该优先找入度为0的节点,只有入度为0,它才是出发节点。
拓扑排序的过程,两步:
(1)找到入度为0 的节点,加入结果集
(2)将该节点从图中移除
循环以上两步,直到 所有节点都在图中被移除了。
如果发现结果集元素个数不等于图中节点个数,我们就可以认定图中一定有有向环,这也是拓扑排序判断有向环的方法。
2.dijkstra(朴素版)精讲
题目链接:47. 参加科学大会(第六期模拟笔试)
文章讲解:代码随想录
思路:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。
最短路算法中的 dijkstra 算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。
(dijkstra 算法可以同时求起点到所有节点的最短路径,权值不能为负数)
dijkstra 算法 同样是贪心的思路,不断寻找距离 源点最近的没有访问过的节点。
dijkstra三部曲:
第一步,选源点到哪个节点近且该节点未被访问过
第二步,该最近节点被标记访问过
第三步,更新非访问节点到源点的距离(即更新minDist数组)
在dijkstra算法中,minDist数组用来记录每一个节点距离源点的最小距离。