簡體   English   中英

有關在C ++中實現圖形的問題

[英]Questions regarding Implementation of graph in c++

我正在學習用C ++實現圖形,因此我閱讀了Wikipedia條目 ,發現有兩種常用的方法: 鄰接表鄰接矩陣 我了解鄰接列表鄰接矩陣之間在空間上的權衡。

我有三個問題

1)除了上面列出的兩種以外,還有其他方法可以實現該圖嗎?

2)使用不同的數據結構之間有什么區別? 鏈表VS向量VS映射

3)下一段在文章中是什么意思

鄰接表和鄰接矩陣之間的另一個重要區別是它們執行的操作效率。 在鄰接表中,每個頂點的鄰居可以按與頂點度成比例的時間有效地列出。 在鄰接矩陣中,此操作所花費的時間與圖中的頂點數量成正比,而該數量可能遠高於度。 另一方面,鄰接矩陣可以測試兩個頂點是否在恆定時間內彼此相鄰; 鄰接表較慢以支持此操作。

efficiency of the operations they perform指的是什么? 什么類型的操作???

two vertices are adjacent to each other in constant time意味着什么?知道兩個頂點是否彼此相鄰有什么實際用途?

  1. 是的,您還可以使用指向其他節點的指針來顯式實現它。
  2. listS消耗更多的內存,並且不是隨機訪問的,但是元素的句柄(迭代器)在插入和刪除時仍然有效; vectorS是內存有效的隨機訪問,但是無效句柄(迭代器)在插入和刪除時會失效; mapS通常會消耗更多的內存,而不要迭代太慢,句柄(迭代器)通常在插入和刪除時仍然有效; 查找子節點可以非常快。 這實際上是這些容器之間的一般區別,並非特定於圖形。
  3. 明確給出了這些操作:列出鄰居和測試鄰接關系。 兩者都有不同的復雜度,具體取決於圖形實現。

two vertices are adjacent to each other僅表示兩個節點之間存在直接邊緣。 以恆定的時間執行此操作意味着該操作與每個節點具有多少個鄰居無關。 按照實際目的去做:是的,很多。 您可能想知道一個城市是否通過直達街道與另一個城市相連。 在折疊等之前,您可能想知道兩個頂點是否具有邊。

在您談論C ++時,我強烈建議您看一下Boost.GraphLemon等一些好的圖形庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM