ошибка назначения краевого итератора BOOST Stack Overflow

Я хочу перебрать график и удалить ребра, рассчитать количество подключенных компонентов, а затем снова добавить ребро в график.

Я застрял в месте, где я должен назначить итератор ребер для первого и последнего ребра графа

edge_iter ei,ei_end,next;

ei = edges(g).first;

Кажется, он не работает даже так:

tie(ei,ei_end) = edges(g);

Я получаю следующую ошибку:

no viable overloaded "="

что это значит??

Вот моя программа на данный момент:

  using namespace boost;
using namespace std;

typedef adjacency_list <listS, vecS, undirectedS> Graph;
typedef graph_traits < Graph >::edge_descriptor Edge;

typedef std::pair<int,int> E;

typedef graph_traits<Graph>::vertex_descriptor Vertex;
typedef property_map<Graph, vertex_index_t>::type IndexMap;

typedef std::pair<int,int> E;
typedef graph_traits<Graph>::vertex_iterator vertex_iter;
typedef graph_traits<Graph>::out_edge_iterator edge_iter;
typedef property_map<Graph, vertex_index_t>::type VertexIndexMap;int main(int,char*[])
{

int num_nodes,num_edges;
cin >> num_nodes >> num_edges;

Graph g(num_nodes);

for(int i = 0;i < num_edges; i++) // i/p edges into graph g
{

int e1,e2;
cin >> e1 >> e2;

Edge e;
bool success;tie(e,success) = add_edge(e1-1, e2-1, g);
}

//graph entry completededge_iter ei,ei_end,next;

ei = edges(g).first;

Я не знаю, что не так, я застрял в части, назначающей итератор.

2

Решение

Вы получили ребра графа с edges(g), Тем не мение, edge_iter определяется как out_edge_iterator,

Это не одно и то же (я думаю, что для всех графовых моделей, которые имеют коллекции out_edge).

Так что либо

typedef graph_traits<Graph>::edge_iterator edge_iter;

или же

graph_traits<Graph>::vertex_descriptor v;
ei = out_edges(v, g).first;

в зависимости от того, что вы пытаетесь достичь, функционально

3

Другие решения


По вопросам рекламы [email protected]