I was probably doing something wrong. It was allowing weird flights.
I watched a lecture from mitopencourseware dealing with Bellman Ford algorithm and implemented a modified version of that to suit my needs.
I totally re-wrote it again to allow multiple "accountants" with each path (hashmap string, accountant) and to getValue(String type) to get the weight
would return the value of whatever accountant you called (each has a name). That way I can put in the algorithm arguments
list vertex, list edge, vertex source, string type
where City=vertex and path=edge.
It's all working dandy now. 4th attempt's the charm.
Thanks for all your help