private static int computeTollAndMaxCost() { Route maxCostRoute = null; for (Route route : validRoutes.values()) { if (maxCostRoute == null) maxCostRoute = route; if (route.totalcost > maxCostRoute.totalcost) maxCostRoute = route; } for (Route route : validRoutes.values()) { route.tollcost = maxCostRoute.totalcost - route.totalcost; route.totalcost += route.tollcost; if (route.tollcost == 0) continue; int tolljunction = junctions; while (tolljunction > 0) { for (Road road : route.roads) { if (route.tollroadidx == 0 && !road.isTollRoad) { if (road.destjunction == tolljunction) { if (road.routes.size() > 1) { Route currroute = null; for (Route mappedroute : road.routes) { if (currroute == null) currroute = mappedroute; if (mappedroute.tollcost != currroute.tollcost) break; currroute = mappedroute; } } else { road.isTollRoad = true; road.tollCost = route.tollcost; tollroads.add(road); route.tollroadidx = road.roadidx; } } } } tolljunction--; } } return maxCostRoute.totalcost; }