コード例 #1
0
  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;
  }