算法與數據結構基礎 - 圖(Graph)

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

785. Is Graph Bipartite?  題解 

802. Find Eventual Safe States  題解

1059. All Paths from Source Lead to Destination  題解

133. Clone Graph  題解

 

關於BFS,詳見:算法與數據結構基礎 - 廣度優先搜索(BFS)

 

最短路徑問題

BFS另可用於求解無權圖的最短路徑問題,相關LeetCode題:

310. Minimum Height Trees  題解

854. K-Similar Strings  題解

 

對於有權圖的單源最短路徑問題,Dijkstra算法用於無負權邊的問題求解 可視化過程,Bellman-Ford算法支持判斷有無負權迴路、如有則不存在最短路徑。Floyd-Warshall是求解多源、無負權邊的最短路徑問題的算法 可視化過程

 

相關LeetCode題:

1129. Shortest Path with Alternating Colors  題解

928. Minimize Malware Spread II  題解

743. Network Delay Time  題解

787. Cheapest Flights Within K Stops  題解 

399. Evaluate Division  題解

 

最小生成樹

假設有權圖中有這樣一棵樹,知足圖任意兩個頂點之間可達、而且這棵樹全部邊的權值之和最小。這樣的樹稱之爲圖的最小生成樹(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題:

684. Redundant Connection  題解

323. Number of Connected Components in an Undirected Graph  題解

839. Similar String Groups  題解

 

更多關於Union Find,詳見:算法與數據結構基礎 - 合併查找(Union Find)

 

圖與拓撲排序

有這樣一類問題:節點之間存在依賴關係,求按依賴關係排列節點,這類問題能夠轉換爲有向無環圖(DAG)、使用拓撲排序(Topological Sort)求解。

 

相關LeetCode題:

207. Course Schedule  題解

210. Course Schedule II  題解

444. Sequence Reconstruction  題解

1136. Parallel Courses  題解

269. Alien Dictionary  題解

 

更多關於拓撲排序,詳見:算法與數據結構基礎 - 拓撲排序(Topological Sort)

相關文章
相關標籤/搜索