图基础css
图(Graph)应用普遍,程序中可用邻接表和邻接矩阵表示图。依据不一样维度,图能够分为有向图/无向图、有权图/无权图、连通图/非连通图、循环图/非循环图,有向图中的顶点具备入度/出度的概念。html
面对图相关问题,第一步是将问题转为用图表示(邻接表/邻接矩阵),二是使用图相关算法求解。git
相关LeetCode题:github
997. Find the Town Judge 题解 算法
1042. Flower Planting With No Adjacent 题解数据结构
图的遍历(DFS/BFS)lua
图的遍历/搜索可以使用DFS或BFS方法。DFS方法 可视化过程,BFS方法 可视化过程spa
相关LeetCode题:3d
332. Reconstruct Itinerary 题解code
802. Find Eventual Safe States 题解
1059. All Paths from Source Lead to Destination 题解
关于BFS,详见:算法与数据结构基础 - 广度优先搜索(BFS)
最短路径问题
BFS另可用于求解无权图的最短路径问题,相关LeetCode题:
对于有权图的单源最短路径问题,Dijkstra算法用于无负权边的问题求解 可视化过程,Bellman-Ford算法支持判断有无负权回路、如有则不存在最短路径。Floyd-Warshall是求解多源、无负权边的最短路径问题的算法 可视化过程
相关LeetCode题:
1129. Shortest Path with Alternating Colors 题解
928. Minimize Malware Spread II 题解
787. Cheapest Flights Within K Stops 题解
最小生成树
假设有权图中有这样一棵树,知足图任意两个顶点之间可达、而且这棵树全部边的权值之和最小。这样的树称之为图的最小生成树(MST,Minimum spanning tree)。求最小生成树有重要的现实应用,例如求城市之间航班的安排、使得总体成本最小。
求最小生成树的算法,有 Kruska算法 可视化过程 和 Prim算法 可视化过程
相关LeetCode题:
1168. Optimize Water Distribution in a Village 题解
1135. Connecting Cities With Minimum Cost 题解
图与并查集
若是须要求解图的某两个顶点是否连通、图分红多少非连通部分,这时能够用并查集(Union Find/Disjoint Set),并查集方法 可视化过程
相关LeetCode题:
323. Number of Connected Components in an Undirected Graph 题解
更多关于Union Find,详见:算法与数据结构基础 - 合并查找(Union Find)
图与拓扑排序
有这样一类问题:节点之间存在依赖关系,求按依赖关系排列节点,这类问题能够转换为有向无环图(DAG)、使用拓扑排序(Topological Sort)求解。
相关LeetCode题:
444. Sequence Reconstruction 题解
更多关于拓扑排序,详见:算法与数据结构基础 - 拓扑排序(Topological Sort)