簡體   English   中英

boost圖形庫:合並無向圖

[英]boost graph library: Merging undirected graphs

這是我關於Stackoverflow的第一篇文章。 因此,如果我無意中違反了任何發布規則,請不要對我加倍努力。

我正在與BGL作戰。 對於我大學的一個項目,我需要一些與圖形相關的東西。 因此,我需要的一項重要功能是合並兩個無向圖。

我已經搜索了相關問題並找到了以下主題:

使用升壓圖合並圖

將圖表(adjacency_list)復制到另一個

第一個不適用於我,因為在copy_graph函數中總是出現“超出范圍”錯誤。 我確信通過嘗試將其應用到程序中,代碼不是問題。

第二個確實合並了兩個圖(與頂點有關),但是新圖的邊信息不正確。

此代碼顯示了我如何定義圖形。 這是具有頂點屬性(無邊緣屬性)的無向圖:

struct m_vertex_properties {
Element* element;
Strip* strip;
};

typedef adjacency_list<vecS, vecS, undirectedS, m_vertex_properties,no_property> MyGraph;
typedef MyGraph::vertex_descriptor NodeID;

根據我發布的第二個鏈接,我使用了以下功能:

*static*/ void Fracture::merging(MyGraph & g1, NodeID v_in_g1, MyGraph & g2, NodeID    u_in_g2) {       // EDGES ARE NOT CREATED CORRECTLY!!!

typedef map<NodeID, size_t> IndexMap;
IndexMap mapIndex;
associative_property_map<IndexMap> propmapIndex(mapIndex);

int i=0;
BGL_FORALL_VERTICES(v, g2, MyGraph)
{
    put(propmapIndex, v, i++);
}

copy_graph( g2, g1, vertex_index_map( propmapIndex ) ); //means g1 += g2
}

正如我提到的:結果圖形(g1)確實包含所有頂點(在我的測試場景2 + 3中),但由於某些原因,它只有3條邊。

我希望對於一個比我先進得多的人來說,錯誤很容易找到。 老實說,我什至不了解該功能的所有功能。 感謝大伙們!

如果將頂點從g2復制到g1,則聽起來很奇怪,沒有復制邊。 大概是邊緣不存在。

您可以嘗試使用以下代碼打印源圖和結果圖:

#include <boost/graph/graph_utility.hpp>
std::cout << std::endl << "graph g2" <<std::endl;
boost::print_graph(g2);

(對於g1,在函數調用之前和之后都類似)。

暫無
暫無

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

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