Boost logo

Boost Users :

Subject: Re: [Boost-users] How to find edge between two vertices of undirected graph?
From: Eric Fowler (eric.fowler_at_[hidden])
Date: 2010-06-10 11:59:03


Whoops ... the compiler must have been hallucinating :-)

I know I was; I can look up an edge, but can't remove one.

I have tried it two ways:

remove_edge(u,v,g);
and
remove_edge(e,g);

with u,v being vertices and e being an edge of course.

Possible I do not have a MutableGraph but really I am not sure. I do know an
edge exists between vertices u and v.

Eric

On Thu, Jun 10, 2010 at 12:46 AM, Cedric Laczny <cedric.laczny_at_[hidden]>wrote:

> Hi,
>
> when I look at the error, I see that it complains about remove_edge().
> However, I don't see any call of this in your example code. So I would
> suggest
> that you either post a complete and short "working" example, or more
> carefully
> select the lines that you post.
>
> Concerning the question in the title of your post, one way to check if
> there
> is an edge between two vertices could be to get the adjacent vertices of
> Vertex b and check if Vertex d is among them, or even to check if Vertex b
> has
> any adjacent vertices at all. I know, this is probably not the nicest
> solution
> but unless you don't use an AdjacencyMatrix graph, I don't know if this
> would
> even be possible in a nicer way, so to say in O(1).
>
> Best,
>
> Cedric
>
> On Thursday, 10. June 2010 06:59:24 Eric Fowler wrote:
> > This should be easy ....
> >
> > typedef adjacency_list<vecS, vecS, undirectedS, POS<position_type>,
> > LEN<position_type> > DG;
> > typedef graph_traits<DG>::vertex_descriptor Vertex;
> > typedef graph_traits<DG>::edge_descriptor Edge;
> >
> > ...
> > Vertex b, d;
> > ...populate b and ....
> >
> > bool bRet;
> > Edge e;
> >
> > tie(e,bRet) = edge(b,d,*this);
> >
> > This earns me a lengthy error message from g++ (following).
> >
> > I notice that there is no function described for looking up an edge on an
> > IncidenceGraph or an AdjacencyGraph ... hmm .... this puzzles me.
> >
> > What am I missing?
> >
> > Eric
> >
> > ../shuttle/trunk/DelaunayGraph.h:273: error: no matching function for
> call
> > to ‘DelaunayGraph<int>::remove_edge(Edge&, DelaunayGraph<int>&)’
> > /usr/include/boost/graph/detail/adjacency_list.hpp:848: note: candidates
> > are: void boost::undirected_graph_helper<Config>::remove_edge(typename
> > Config::edge_descriptor) [with Config =
> > boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS,
> boost::vecS,
> > boost::undirectedS, POS<int>, LEN<int>, boost::no_property,
> boost::listS>,
> > boost::vecS, boost::vecS, boost::undirectedS,
> > boost::property<boost::vertex_bundle_t, POS<int>, boost::no_property>,
> > boost::property<boost::edge_bundle_t, LEN<int>, boost::no_property>,
> > boost::no_property, boost::listS>::config]
> > /usr/include/boost/graph/detail/adjacency_list.hpp:859: note:
> > void boost::undirected_graph_helper<Config>::remove_edge(typename
> > Config::out_edge_iterator) [with Config =
> > boost::detail::adj_list_gen<boost::adjacency_list<boost::vecS,
> boost::vecS,
> > boost::undirectedS, POS<int>, LEN<int>, boost::no_property,
> boost::listS>,
> > boost::vecS, boost::vecS, boost::undirectedS,
> > boost::property<boost::vertex_bundle_t, POS<int>, boost::no_property>,
> > boost::property<boost::edge_bundle_t, LEN<int>, boost::no_property>,
> > boost::no_property, boost::listS>::config]
> > make: *** [MyDialog.o] Error 1
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net