У меня есть файл, который представляет собой длинный список взвешенных ребер, в следующем виде
node1_id node2_id weight
node1_id node3_id weight
и так далее. Таким образом, одно взвешенное ребро на строку.
Я хочу загрузить этот файл в график повышения и найти подключенные компоненты в графике. Каждый из этих связанных компонентов является подграфом. Для каждого из этих компонентных подграфов я хочу написать файл, содержащий его ребра в вышеописанном формате. Я хочу сделать все это, используя график повышения.
Эта проблема в принципе проста, просто я не уверен, как правильно ее реализовать, потому что я не знаю, как работать с Boost Graph. Я уже потратил несколько часов и у меня есть код, который найдет подключенные компоненты, но моя версия, конечно, намного длиннее и сложнее, чем необходимо - я надеюсь, что есть ниндзя-буст-граф, который может показать мне правильное, простой способ.
Поскольку это было запрошено, вот код, который у меня есть. Я не думаю, что я использую повышение здесь наиболее эффективным или изящным способом, и это решение не является полным (я не беру подграфы и распечатываю каждый из их краев в отдельные файлы).
#включают
#включают
#включают
#включают
#включают
#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));