我想迭代一个图并删除边计算连接组件的数量,然后再将边再添加到图中。
我被困在应该将边缘迭代器分配给图形的第一个和最后一个边缘的地方
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 completed
edge_iter ei,ei_end,next;
ei = edges(g).first;
我不知道出了什么问题,我被困在分配迭代器的部分。
答案 0 :(得分:3)
你有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;
取决于您想要实现的功能,