Search code examples
javapath-findingdijkstra

Algorithm for finding the closest way to get from point A to point B in transit network?


Ok, I'm trying to code a basic program that could help user to find the closest way to travel from point A to point B in subway network. Currently, I'm coding this in Java and I have three classes which are Station class, Route class and Control Class. The idea is that Route object stores a limited number of Station objects in the array-list which is actually simulating a single subway route that contains an exact amount of stations. Also, Station object that can stores a few number of Route Objects as well just like a transit subway station that located in a multiple routes at the same time. The part that I'm working on is to let user enter their departure station and destination station then the program will print out a list of stations that they needed to transfer(which has to be as lowest as possible) in order to arrive in their destination. At this time, I'm quite struck on finding a good algorithm to do this part of the program and I can'think of how can I write the code that can perform this task in a complex network. So if anyone have any idea, please guide me on this. Thank you.


Solution

  • Dijsktra's Algorithm works well to compute single source shortest paths on the fly. You could also potentially precompute all shortest paths for each pair of stations beforehand, using a multi-source shortest path algorithm such as the Floyd-Warshall Method.

    Both algorithms are very easy to implement given the right data structures (I would think the Route Class you have may not be necessary, why don't you just have each Station Object contain a list of it's direct neighbors? This more closely follows a generic graph data structure). You could create a pre-computed lookup table (though for a lot of stations this would be large) for each station that tells you from that station, given a desired destination station, what neighbor station to move to next. This would be in essence creating routing tables for each station.