我有一个文件是一长串加权边,列表如下
node1_id node2_id weight
node1_id node3_id weight
等等。所以每行一个加权边。
我想将此文件加载到boost图中,并在图中找到连接的组件。每个连接的组件都是子图。对于这些组件子图中的每一个,我想写一个包含上述格式边的文件。我想用升压图来做所有这些。
这个问题原则上很简单,只是我不确定如何巧妙地实现它,因为我不了解Boost Graph的方法。我已经花了几个小时并且有代码可以找到连接的组件,但是我的版本肯定要长得多,而且更复杂 - 我希望有一个提升图形的忍者可以告诉我正确的,简单的方法。
因为它是被请求的,所以这是我到目前为止的代码。我不认为我在这里以最有效或最优雅的方式使用boost,并且这个解决方案并不完整(我不会将子图打印出来并将每个边缘打印成单独的文件)。 #包括 #包括 #包括 #包括 #包括 #include
using namespace std;
typedef adjacency_list <vecS,
vecS,
undirectedS,
property<edge_weight_t float>
> AdjListGraph;
void writeConnectedComponents(char *filename)
{
AdjListGraph G;
ifstream inputFile;
inputFile.open(filename);
unsigned int id1, id2;
float weight;
string lineread;
stringstream ss;
while(getline(inputFile, lineread))
{
ss.clear();
ss.str("");
ss << lineread;
ss >> id1;
ss >> id2;
ss >> weight;
add_edge(id1, id2, weight, G);
}
/* Following vector contains the component number of each node */
vector<int> components(num_vertices(G));
答案 0 :(得分:3)
我使用Boost.Graph来构建Gnocchi。
学习曲线非常陡峭。我认为在这个图书馆获取这本书至关重要。帮助我了解该库的是实际修改它以使其按照我的意愿行事。后来我发现了如何正确使用它。我只触及了图书馆的一小部分,但他们做事的方式非常有趣。还有Python的绑定,所以我认为花一些时间学习它是值得的。