में दो चरम सीमाओं के बीच पथ ढूंढना यह ज्यादातर तार्किक प्रश्न है, लेकिन संदर्भ Django में किया जाता है।Django ग्राफ़
हमारे डेटाबेस में हम वर्टेक्स और रेखा वर्ग है, ये एक (तंत्रिका) नेटवर्क बनाने, लेकिन यह अव्यवस्थित है और मैं इसे बदल नहीं सकते, यह एक विरासत डाटाबेस
class Vertex(models.Model)
code = models.AutoField(primary_key=True)
lines = models.ManyToManyField('Line', through='Vertex_Line')
class Line(models.Model)
code = models.AutoField(primary_key=True)
class Vertex_Line(models.Model)
line = models.ForeignKey(Line, on_delete=models.CASCADE)
vertex = models.ForeignKey(Vertex, on_delete=models.CASCADE)
है अब, आवेदन में , उपयोगकर्ता नेत्रहीन चयन दो vertexes में सक्षम हो जाएगा (नीचे हरी हलकों)
जावास्क्रिप्ट तो Django के लिए इन दो vertexes के pk भेज देंगे,
व्यापार तर्क:
- एक शीर्ष 1-4 हो सकता है और यह लाइन वर्गों है कि उन दोनों के बीच एक मार्ग को पूरा करना, इस मामले में, निम्नलिखित 4 लाल लाइन्स को खोजने के लिए है यह करने के लिए संबंधित लाइन्स
- एक लाइन हो सकता है 1-2 vertexes इसे से संबंधित
- वहाँ केवल दोनों के बीच एक संभव मार्ग होगा vertexes
क्या मैं अब तक है:
- मैं समझता हूँ कि इस सवाल का जवाब शायद प्रत्यावर्तन शामिल है कि
- पथ जब तक दूसरे को ढूंढ रहा है एक वर्टेक्स से हर पथ कोशिश कर रहा द्वारा मिल जाना चाहिए, यह सीधे नहीं किया जा सकता पाया
- के बाद से वहाँ चार और तीन तरह जंक्शनों, सभी मार्गों मुकदमा चल रहा प्रत्यावर्तन भर सहेजा जाना चाहिए (यह एक अनिश्चित)
मैं जानता हूँ कि बुनियादी तर्क प्रत्येक के सभी लाइनों के माध्यम से पाशन है वर्टेक्स, और फिर इन पंक्तियों के अन्य वर्टेक्स प्राप्त करें, और फिर से चलते रहें, लेकिन मुझे नहीं पता कि इस पर कहां से शुरू करना है।
def findRoute(request):
data = json.loads(request.body.decode("utf-8"))
v1 = Vertex.objects.get(pk=data.get('v1_pk'))
v2 = Vertex.objects.get(pk=data.get('v2_pk'))
lines = v1.lines.all()
routes = []
for line in lines:
starting_line = line
#Trying a new route
this_route_index = len(routes)
routes[this_route_index] = [starting_line.pk]
other_vertex = line.vertex__set.all().exclude(pk=v1.pk)
#There are cases with dead-ends
if other_vertex.length > 0:
#Mind block...
पर अधिक विकल्प मैं व्यक्तिगत रूप से संबंधों से ऐसा करना चाहता था क्योंकि यह तेज़ी से लग रहा था, लेकिन नेटवर्कक्स वास्तव में अद्भुत है और अन्य परियोजनाओं के साथ मदद करता है – Mojimi