圖基礎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)