public MelhorRotaDTO encontrarMelhorRota() throws NenhumaRotaEncontradaException {

		procurarRotas();

		List<Rota> melhorRotaEncontrada = null;

		Integer distanciaMenorRotaEncontrada = null;

		for (List<Rota> list : rotasEncontradas) {
			int index = 1;
			Integer distanciaDestaRota = 0;
			for (Rota rota : list) {
				distanciaDestaRota += rota.getDistancia();
				if (index == list.size()) {
					if (ehODestinoPesquisado(rota)) {
						if (distanciaMenorRotaEncontrada == null || distanciaDestaRota < distanciaMenorRotaEncontrada
								|| (distanciaDestaRota == distanciaMenorRotaEncontrada && list.size() < melhorRotaEncontrada.size())) {
							distanciaMenorRotaEncontrada = distanciaDestaRota;
							melhorRotaEncontrada = list;
						}
					}
				}
				index++;
			}
		}

		if (melhorRotaEncontrada == null) {
			throw new NenhumaRotaEncontradaException(pesquisaRotaDTO);
		}

		BigDecimal consumoEstimado = new BigDecimal(distanciaMenorRotaEncontrada).divide(new BigDecimal(pesquisaRotaDTO
				.getAutonomiaVeiculo()));

		BigDecimal custoEstimadoDaRota = consumoEstimado.multiply(pesquisaRotaDTO.getValorLitroCombustivel());

		return new MelhorRotaDTO(melhorRotaEncontrada, custoEstimadoDaRota);
	}