2010-06-23 14 views
16

मैं n तत्वों वर्ग CElement के साथ परिभाषित करते हैं करने के लिए कस्टम कोने जोड़ने, कैसे एक बढ़ावा ग्राफ के साथ उन तत्वों के कोने बना सकते हैं - और उन्हें भी कनेक्ट? मैंने बूस्ट ग्राफ़ बंडल प्रोप को देखा है, लेकिन मैं इसे सिर्फ एक नहीं समझ सकता।एक बढ़ावा ग्राफ

+0

स्पष्ट नहीं होने के लिए खेद है। CELEments के उदाहरण शिखर हैं। मैं CELEments के उन उदाहरणों को जोड़ने, हटाने, कनेक्ट करने और डिस्कनेक्ट करने में सक्षम होना चाहता हूं। क्या मुझे वास्तव में स्ट्रक्चर वर्टेक्स को परिभाषित करने की आवश्यकता है जिसमें पीईटी से सीमेंटमेंट इंस्टेंस है या एक और शानदार तरीका है? – dodol

उत्तर

50

मुझे समझ नहीं आता क्या आप वास्तव में क्या करना चाहते हैं। क्या आप कुछ डेटा को जोड़ों में जोड़ना चाहते हैं? फिर बंडल गुणों का उपयोग करें।

//Define a class that has the data you want to associate to every vertex and edge 
struct Vertex{ int foo;} 
struct Edge{std::string blah;} 

//Define the graph using those classes 
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge > Graph; 
//Some typedefs for simplicity 
typedef boost::graph_traits<Graph>::vertex_descriptor vertex_t; 
typedef boost::graph_traits<Graph>::edge_descriptor edge_t; 

//Instanciate a graph 
Graph g; 

// Create two vertices in that graph 
vertex_t u = boost::add_vertex(g); 
vertex_t v = boost::add_vertex(g); 

// Create an edge conecting those two vertices 
edge_t e; bool b; 
boost::tie(e,b) = boost::add_edge(u,v,g); 


// Set the properties of a vertex and the edge 
g[u].foo = 42; 
g[e].blah = "Hello world"; 

गुण सेट करने के अन्य तरीके हैं, लेकिन वहां आपके पास बूटस्ट्रैप का उदाहरण है।

मुझे आशा है कि मैं सवाल गलत नहीं किया।

+1

मुझे लगता है कि किनारे के बजाय e = boost :: add_edge (u, v, g); एक edge_t ई लिखना चाहिए; बूल जोड़ा गया; बूस्ट :: टाई (ई, जोड़ा गया) = boost :: add_edge (u, v, g); – dodol

+0

धन्यवाद! मैं सही है कि –

+2

@Tristram "बंडल गुण का उपयोग कर की तुलना में आसान" - क्या आप इस जवाब में बताया है कि वास्तव में * * बंडल गुण है। =) – wjl

संबंधित मुद्दे