2015-07-01 12 views
7

में निर्धारित टोपोलॉजिकल ऑर्डर मैं दिशात्मक ग्राफ बनाने और टोपोलॉजिकल ऑर्डर में अपने नोड्स को पुनर्प्राप्त करने के लिए scala-graph लाइब्रेरी का उपयोग कर रहा हूं। चूंकि ग्राफ के स्थलीय क्रम के लिए कई संभावनाएं हो सकती हैं, इसलिए मुझे ग्राफ के लिए स्थलीय क्रम के लिए निर्धारक परिणाम होना चाहिए जो समान रूप से समान और निर्मित हैं।स्कैला ग्राफ

यह छोटा सा एप्लिकेशन समस्या

import scalax.collection.Graph 
import scalax.collection.GraphEdge.DiEdge 
import scalax.collection.GraphPredef._ 

object MainApp extends App { 

    // Creates new graph for every call 
    // val is not an option 
    def graph: Graph[String, DiEdge] = Graph(
    "A" ~> "B", 
    "A" ~> "C", 
    "A" ~> "D", 
    "B" ~> "E", 
    "B" ~> "F", 
    "C" ~> "G", 
    "C" ~> "H", 
    "D" ~> "F", 
    "D" ~> "G" 
) 

    val results = 1 to 20 map { _ => 
    graph.topologicalSort.mkString("") 
    } 

    println(results.tail.forall(_ == results.head)) 
} 

इस एप्लिकेशन को प्रिंट झूठी पर प्रकाश डाला गया।

क्या स्कैला-ग्राफ लाइब्रेरी के एपीआई का उपयोग करके ग्राफ के निर्धारक स्थलीय प्रकार का निर्माण करने का कोई तरीका है? ऐसा करने के खरोंच से एक एल्गोरिदम लिखना मेरा आखिरी विकल्प होगा।

उत्तर

1

समारोह on github के कार्यान्वयन के अनुसार, नोड्स एक ComponentTraverser जो

def componentTraverser(parameters: Parameters = Parameters(), subgraphNodes: (NodeT) ⇒ Boolean = anyNode, subgraphEdges: (EdgeT) ⇒ Boolean = anyEdge, ordering: ElemOrdering = noOrdering): ComponentTraverser 

फिर topologicalSort इस पर कहा जाता है के साथ प्राप्त किया जाता है का उपयोग कर इकट्ठे हुए हैं। प्राप्त करने के लिए आप अपने नोड्स के मूल्य पर ऑर्डर देकर स्थलीय प्रकार को निर्धारित कर सकते हैं और फिर सॉर्ट फ़ंक्शन स्वयं को कॉल कर सकते हैं। समाधान हालांकि परीक्षण नहीं किया गया।

+0

मैंने प्रश्न पोस्ट करने से पहले इस दृष्टिकोण की कोशिश की और यह काम नहीं करता है। जैसा कि पीटर एम्पेन ने यहां बताया है https://github.com/scala-graph/scala-graph/issues/41, जैसे ही टोपोलॉजिकल सॉर्ट को पुस्तकालय में पूरी तरह से एकीकृत किया जाता है, –