Im Endeffekt kann man alles was mit dem Transportnetz zu tun hat auf Graphen runter brechen.
Es gibt nur (unterschiedliche) Knoten (Halte, Signale und Abzweigungen) und die Verbindungen dazwischen (Kanten), die unterschiedliche Attribute haben (z.B. Wegtyp, vMax, Trassenkosten)
Je nachdem wie man es betrachtet, könnten Signale auch als Knoten wegfallen und nur in der "wie schnell kome ich von Knoten A nach B Logik" enthalten sein.
Stationen sind allerdings immer Knoten, da diese schließlich ein "Abzweig" von Gleisen auf den Fußweg sind.
Hat man erstmal ein solches Netz aufgebaut, kann man auf diesem Linien definieren und daraus wieder einen neuen Graphen bauen. von jeder Station aus kann auf den Fußweg "umgestiegen werden. Die Fußwege sind allerdings die einzigen "Linien" die nicht im Graphen gespeichert sein sollten, da diese doch recht viele sind (von jeder Station zu jeder anderen Station und jedem Haus vorrausgesetzt alle Städte sind mit Straßen verbunden)
Am Ende kann man dann auf dem Liniengraphen mit einem kürzester (bester) Pfad Algorithmus die beste Verbindung heraussuchen. Hierbei muss man wissen zu welcher Zeit man startet und wann welches Verkehrsmittel an welcher Station sein wird.
Btw. liegt genau hier der Faktor der große Transportnetze extrem langsam macht, was durch sehr große Städte (viele Einwohner) noch begünstigt wird. Eine solche Suche benötigt nämlich größenordnungsmäßig eine Zeit von mindestens O(n*log n + m), wobei n die Anzahl der Knoten ist und m die Anzahl der Kanten. Das heißt also der Aufwand liegt irgendwo zwischen einem linearen und einem quadratischen Aufwand.
Ich vermute mal im aktuellen Simutrans wird das auch so in der Art umgesetzt.
Jetzt aber nochmal zurück zu den Prioritäten. Ich spiele aktuell man wieder ein wenig Simutrans und da gibt es die 2 Block Signale. Das System funktioniert ähnlich wie die Idee von @Yid bzw. @Grimes, allerdings Streckengebunden anstatt Fahrzeug oder Liniengebunden, was in den meisten Fällen wohl auch sinnvoller sein dürfte.
Ein 2-Block Signal reserviert einfach die nächsten 2 Blöcke, anstatt nur einen. Ich würde es allerdings lieber sehen, wenn man bei jedem normalen Signal einfach einstellen kann wie viele Blöcke es blockieren soll, wenn es überfahren wird anstatt dieses als spezielles Signal zu implementieren. Man könnte dann in einem an und ausschaltbaren Signal Layer die entsprechende Zahl über den Signalen einblenden o.ä.)
Die Idee gefällt mir zwar nicht ganz so gut wie meine andere, dürfte aber eine ganze Ecke einfacher zu implementieren sein und in den meisten Fällen mehr Sinn ergeben als die reservierten Blöcke fest an die Linien oder gar Fahrzeuge zu binden.