Du wirst wohl eine kleine Schleife in der Sprache deiner Wahl schreiben müssen.
Ich habe mal ein Beispiel in Python gegeben (und nur sqlite anstatt mysql benutzt)
Zyklische Routen führen zu einer endlosschleife, wenn es keinen Weg zum Ziel gibt. Die müsstest du natürlich getrennt abfragen.
Der Grundgedanke ist der, dass du, bildlich gesprochen, an jeder Station einen virtuellen Fahrgast in jeden möglichen Zug einsteigen lässt, und dann für jeden einzelen am Zielbahnhof genauso verfährst, bis einer angekommen ist.
Bei langen Strecken wird das natürlich extrem speicherintensiv
Code:
import sqlite
DB = sqlite.connect("test")
Cur = DB.cursor()
def FindShortestRoute(start,end,cursor):
routes = [[start]]
while 1:
try:
route = routes.pop()
except IndexError:
# list empty
return None
# route[-1] is the last element
cursor.execute("select * from foo where s1=%i" % route[-1])
for s1,s2 in cursor.fetchall():
if s2 == end:
return route+[s2]
newroute = route + [s2]
routes.append(newroute)
print FindShortestRoute(1,6,Cur) #Result [1, 2, 3, 6]
Lesezeichen