2012-02-07 8 views
5

मैं संपत्ति मानचित्रों का उपयोग करते समय इसका उदाहरण देखता हूं, लेकिन जब वर्टिस और किनारों को संभालने के लिए structs का उपयोग नहीं करता है (मुझे लगता है कि इसे 'बंडल' कहा जाता है)।ग्राफविज़ में एक बूस्ट ग्राफ़ को प्रदर्शित करने वाले गुणों में से एक के साथ प्रिंट कैसे करें?

मेरे पास एक आसन्न सूची ग्राफ में ऐसे अक्षरों और किनारों को परिभाषित किया गया है।

struct Vertex 
{ 
    string name; 
    int some_int; 
}; 

struct Edge 
{ 
    double weight; 
}; 

ग्राफ निम्न प्रकार से बनाया जाता है:

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge> boost_graph; 

मैं मैं एक छवि के रूप में यह देख सकते हैं Graphviz प्रारूप में इन वस्तुओं में से मेरी ग्राफ प्रिंट करना चाहते हैं, तो। हालांकि, मैं नोड्स और किनारों को न केवल चाहता हूं। मैं छवि में दिखाई देने के लिए किनारों पर name गुणों और weight पर विशेषता भी चाहता हूं। मैं यह कैसे कर सकता हूँ?

+0

मुझे लगता है कि आपको एक पूर्ण नमूना दिखाना चाहिए। मैं नहीं देख सकता कि आपने एज के साथ एक पेड़ कैसे बनाया है जिसे परिभाषित किया गया है। शायद, एक किनारे के लिए एक मैप संपत्ति? – sehe

+0

@sehe धन्यवाद। मैंने प्रश्न में ग्राफ परिभाषा को जोड़ा है। किनारों और शिखर कार्यों को बढ़ावा देने के द्वारा जोड़ा जाता है :: add_edge और boost :: add_vertex – Jim

+0

क्या आप डॉट प्रारूप परिभाषा की तलाश में हैं? http://www.graphviz.org/Gallery.php बस किसी भी उदाहरण पर क्लिक करें और उन्हें बनाने के लिए जो कोड लेता है उसे देखें :-) –

उत्तर

6

मैंने पहली बार बुरी जानकारी दी। यहां सही जवाब दिया गया है।

#include <boost/graph/graphviz.hpp> 

using namespace boost; 

// Graph type 
typedef adjacency_list<vecS, vecS, directedS, VertexProperties, EdgeProperty> Graph; 
Graph g; 
std::vector<std::string> NameVec; // for dot file names 


// write the dot file 
std::ofstream dotfile (strDotFile.c_str()); 
write_graphviz (dotfile, g, make_label_writer(&NameVec[0])); 
+0

का लाभ लेना चाहता हूं धन्यवाद लेकिन मुझे WriteDOTFile नामक एक विधि नहीं दिखाई दे रही है .. यह कहां है? – Jim

+0

@ मार्टिन क्रिस्टियनसन हाँ, लेकिन यह यह नहीं समझाता है कि .WriteDOTFile फ़ंक्शन कहां है? मुझे यकीन नहीं है कि आप क्या कह रहे हैं। – Jim

+0

अद्यतन के लिए धन्यवाद। क्या make_label_writer किसी भी तरह से Vertex संरचना से स्ट्रिंग को चुनता है? – Jim

21

मैं बस इस प्रश्न पर ठोकर खाई। यद्यपि इसका एक स्वीकार्य उत्तर है, मैंने सोचा कि मैं अपना संस्करण भी जोड़ूंगा।

आप अपने ग्राफ में bundled property का उपयोग कर रहे हैं। आपके बंडल गुणों से संपत्ति मानचित्र प्राप्त करने का सही तरीका boost::get का उपयोग करना है। तो अगर आप की तरह कुछ कर सकते हैं:

boost::write_graphviz(std::cout, your_graph, 
    boost::make_label_writer(boost::get(&Vertex::name, your_graph)), 
    boost::make_label_writer(boost::get(&Edge::weight, your_graph)), 
    ); 

कहाँ your_graph ग्राफ वस्तु आपके द्वारा बनाए गए है।

+1

आप टिक आईएमएचओ के पात्र हैं: डी –

+0

@ क्रिसहुआंग-लीवर , :-) धन्यवाद। – Vikas

+0

मेरे पास एक ही समस्या है, लेकिन, सार्वजनिक विशेषता के बजाय, मेरे वर्टेक्स क्लास के लिए एक विधि है, क्लास वर्टेक्स {public: int getID(); निजी: int m_iID;}; ग्राफ़विज़ फ़ाइल में आईडी डालने के लिए मुझे इस मामले में क्या करना चाहिए? – Jepessen

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