Wydaje mi się, że powinno dać się zrobić zwykłym zapytaniem hierarchicznym.
W Oracle mogłoby to wyglądać tak: http://sqlfiddle.com/#!4/81363/10
Idea jest następująca:
- Połączenia reprezentujemy jako graf: (przystanek z którego jedziemy, przystanek sąsiedni, numer trasy). Jeśli z przystanku 1 do 2 możemy dojechać np. liniami A,B,C to mamy w tabelce 3 wpisy.
- Robimy zapytanie hierarchiczne (NOCYCLE w zapytaniu mówi Oraclowi, że w razie znalezienia cyklu ma kontynuować pracę, a nie wywalać się radośnie z komunikatem o znalezieniu cyklu)
- startujemy z wybranego przystanku
- zapamiętujemy przystanki pośrednie
- zapamiętujemy numery tras
- Wybieramy tylko te trasy, które kończą się na żądanym przystanku końcowym
Pozostaje rozbić ciąg "/A/A/A/B/C/D/E" na wiele wierszy i wyciągnąć liczbę unikalnych identyfikatorów tras. Od tego odejmujemy 1 (zakładam, że skoro podróż przechodzi przez N tras to optymalnie zrobiliśmy N-1 przesiadek) i gotowe...
Pozostaje przetestować i zobaczyć czy są dziury w takim podejściu ;)