Re: [Boost-users] [Graph] newbie to graph (Andrew Sutton) (Phillip Jones)

Hello, Applying the suggestion below:
struct Node { std::string name; long index; boost::default_color_type color; long distance; graph_traits<Graph>::edge_descriptor predecessor; };
struct Arc { long capacity; long residual; graph_traits<Graph>::edge_descriptor rev; };
With the following call:
flow = kolmogorov_max_flow(g, s, t, capacity_map(get(&Arc::capacity, g)). residual_capacity_map(get(&Arc::residual, g)). reverse_edge_map(get(&Arc::rev, g)). predecessor_map(get(&Node::predecessor, g)). color_map(get(&Node::color, g)). distance_map(get(&Node::distance, g)). vertex_index_map(get(&Node::index, g)) );
Resulted with many errors.But I think I found the right way. The following
code compiles without errors or warnings: ----------------CODE---------------------------- #include <boost/config.hpp> #include <iostream> #include <string> #include <boost/graph/kolmogorov_max_flow.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/write_dimacs.hpp> #include <boost/graph/read_dimacs.hpp> using namespace boost; struct Arc; struct Node; typedef adjacency_list<vecS,vecS,directedS,Node,Arc> Graph; struct Arc { long capacity; long residual_capacity; Graph::edge_descriptor reverse; }; struct Node { std::string name; Graph::edge_descriptor predecessor; default_color_type color; long distance; long index; }; int main() { typedef Graph::vertex_descriptor vertex_descriptor; typedef Graph::edge_descriptor edge_descriptor; typedef std::pair<edge_descriptor, bool> EdgePair; typedef std::pair<int,int> Pair; Graph g; property_map<Graph, long Arc::*>::type capacity = get(&Arc::capacity, g); property_map<Graph, long Arc::*>::type res_capacity = get(&Arc::residual_capacity, g); property_map<Graph, Graph::edge_descriptor Arc::*>::type reverse = get(&Arc::reverse,g); property_map<Graph,Graph::edge_descriptor Node::*>::type predecessor = get(&Node::predecessor,g); property_map<Graph,default_color_type Node::*>::type color = get(&Node::color,g); property_map<Graph,long Node::*>::type distance = get(&Node::distance,g); property_map<Graph,long Node::*>::type index = get(&Node::index,g); long flow; vertex_descriptor s, t; Pair edge_array[6] = { Pair(0,1), Pair(0,2), Pair(0,3), Pair(2,4), Pair(1,3), Pair(4,3), }; EdgePair edge_desc_obj; EdgePair edge_from_first=add_edge(edge_array[0].first,edge_array[0].second,g); g[edge_from_first.first].capacity=1; for (int i = 1; i < 5; ++i){ edge_desc_obj=add_edge(edge_array[i].first, edge_array[i].second,g); g[edge_desc_obj.first].capacity=i+1; } EdgePair edge_to_last=add_edge(edge_array[5].first,edge_array[5].second,g); g[edge_to_last.first].capacity=4; char str[2]; int i=0; vertex_descriptor v1=*vertices(g).first,v2=*vertices(g).second; while (v1!=v2) { sprintf(str,"%d",i); g[v1].name=str; v1++; i++; } edge_descriptor from_s,to_t; from_s=edge_from_first.first; to_t=edge_to_last.first; s=source(from_s,g); t=target(to_t,g); flow = kolmogorov_max_flow(g,capacity,res_capacity,reverse,predecessor,color,distance,index,s,t); return 0; } -----------------------------END OFCODE----------------- However when trying to run this code I receive "Segmentation error". (this error does not appear when I remove the call to kolmogorov) I work under linux and I tried to compile with both g++ and g++-3.3 The valgrind output can be found at: http://www.cs.huji.ac.il/~lweizm45/valgring_output.txt Any suggestions? Lior

However when trying to run this code I receive "Segmentation error". (this error does not appear when I remove the call to kolmogorov) I work under linux and I tried to compile with both g++ and g++-3.3 The valgrind output can be found at: http://www.cs.huji.ac.il/~lweizm45/valgring_output.txt<http://www.cs.huji.ac.il/%7Elweizm45/valgring_output.txt>
Please try to keep replies in the same thread (omitting names in the subject will accomplish this). Which version of g++ besides 3.3? I'm not entirely sure that g++-3.3 is actually supported by Boost or at least thoroughly tested. Debugging is generally your own responsibility. If you can verify that the bug lies in the algorithm implementation, then you should file a ticket against it. Andrew Sutton andrew.n.sutton@gmail.com

Date: Mon, 3 Nov 2008 07:49:18 -0500 From: andrew.n.sutton@gmail.com To: boost-users@lists.boost.org Subject: Re: [Boost-users] [Graph] newbie to graph (Andrew Sutton) (Phillip Jones) However when trying to run this code I receive "Segmentation error". (this error does not appear when I remove the call to kolmogorov) I work under linux and I tried to compile with both g++ and g++-3.3 The valgrind output can be found at: http://www.cs.huji.ac.il/~lweizm45/valgring_output.txt Did you try something like catch (...)? With the regex code under 3.3 ( IIRC) on cygwin, I had a few mystery errors that fully resolved on upgrading to 3.4.4. Please try to keep replies in the same thread (omitting names in the subject will accomplish this). Which version of g++ besides 3.3? I'm not entirely sure that g++-3.3 is actually supported by Boost or at least thoroughly tested. Debugging is generally your own responsibility. If you can verify that the bug lies in the algorithm implementation, then you should file a ticket against it. Andrew Sutton andrew.n.sutton@gmail.com _________________________________________________________________ See how Windows connects the people, information, and fun that are part of your life. http://clk.atdmt.com/MRT/go/msnnkwxp1020093175mrt/direct/01/
participants (3)
-
Andrew Sutton
-
Lior Weizman
-
Mike Marchywka