これは主に論理的な質問ですが、コンテキストはDjangoで行われます。私達のデータベースではグラフ内の2つの頂点間のパスを見つける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)
です、ユーザは、視覚的にTWO頂点(以下、緑の円)
ジャバスクリプトは、次にジャンゴにこれら2つの頂点のPKを送信する選択することができるであろう
ビジネスロジック:
- A頂点が1-4を持つことができ、それが、この場合には、それらの間のルートを満たすラインクラスは、以下の4本の赤い線を見つけることがありますそれに関連した行は
- Aライン1-2頂点が
- のみ
:
- 私は答えはおそらくパスを見つけることです、それは直接にはできません他の刚性一つの頂点からのすべてのパスを試みるによって発見されなければならない再帰
- が含まれていることを理解して私は基本的なロジックは、それぞれのすべてのラインを通ってループしている知っている
(このいずれかの不明)
これは、私の知る限り得ることができるようですが、それはおそらく(views.py)には役立ちません:
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...
私は個人的にはそれがより速く見える関係でやりたいと思っていましたが、Networkxは本当に素晴らしいし、他のプロジェクトで助けました – Mojimi