ऑब्जेक्ट्स और पॉइंटर्स
ये सिर्फ बुनियादी डेटास्ट्रक्चर हैं जैसे हमार ने दूसरे उत्तर में कहा, Java
आप इसमें किनारों और कोने जैसी कक्षाओं का प्रतिनिधित्व करेंगे। उदाहरण के लिए एक किनारे दो कोने जोड़ता है और इसे या तो निर्देशित या अप्रत्यक्ष किया जा सकता है और इसमें एक भार हो सकता है। एक शीर्ष पर एक आईडी, नाम आदि हो सकता है। अधिकतर दोनों में अतिरिक्त गुण होते हैं। तो आप जैसे चाहें उनके साथ अपना ग्राफ बना सकते हैं
Vertex a = new Vertex(1);
Vertex b = new Vertex(2);
Edge edge = new Edge(a,b, 30); // init an edge between ab and be with weight 30
यह दृष्टिकोण आमतौर पर वस्तु उन्मुख कार्यान्वयन के लिए उपयोग किया जाता है, क्योंकि यह ऑब्जेक्ट उन्मुख उपयोगकर्ताओं के लिए अधिक पठनीय और सुविधाजनक है;)।
आव्यूह
एक मैट्रिक्स सिर्फ एक सरल 2 आयामी सरणी है। मान लें कि आपके पास वर्टेक्स आईडी है जिसे इस तरह से एक इंट सरणी के रूप में दर्शाया जा सकता है:
int[][] adjacencyMatrix = new int[SIZE][SIZE]; // SIZE is the number of vertices in our graph
adjacencyMatrix[0][1] = 30; // sets the weight of a vertex 0 that is adjacent to vertex 1
यह आमतौर पर घने रेखांकन के लिए उपयोग किया जाता है जहां सूचकांक पहुंच आवश्यक है। आप इसके साथ संयुक्त राष्ट्र / निर्देशित और भारित संरचना का प्रतिनिधित्व कर सकते हैं।
आसन्न सूची
यह सिर्फ एक सरल डेटास्ट्रक्चर मिश्रण है, मैं आमतौर पर इसे का उपयोग करके लागू करता हूं HashMap<Vertex, List<Vertex>>
। HashMultimap
अमरूद में भी ऐसा ही प्रयोग किया जा सकता है ।
यह दृष्टिकोण अच्छा है, क्योंकि आपके पास ओ (1) (amortized) वर्टेक्स लुक है और यह मुझे इस विशेष वर्टेक्स के लिए सभी आसन्न कोने की एक सूची देता है जिसकी मैंने मांग की थी।
ArrayList<Vertex> list = new ArrayList<>();
list.add(new Vertex(2));
list.add(new Vertex(3));
map.put(new Vertex(1), list); // vertex 1 is adjacent to 2 and 3
इसका उपयोग विरल रेखांकन को दर्शाने के लिए किया जाता है, यदि आप Google पर आवेदन कर रहे हैं, तो आपको पता होना चाहिए कि वेबग्राफ विरल है। आप एक BigTable का उपयोग करके उनके साथ अधिक स्केलेबल तरीके से व्यवहार कर सकते हैं ।
ओह और BTW, यहाँ फैंसी तस्वीरों के साथ इस पोस्ट का बहुत अच्छा सारांश है;)