Java jcretor algoritmo

Necesito ayuda con este algoritmo para resolverlo en jcreator
este es el algoritmo
varias ambulancias recorren la ciudad, y cuando resiven en la central una llamada, se informa la ubicación de la emergencia mediante coordenadas, lo mismo en la ubicación de todas las ambulancias
la central es el punto 0,0 se sabe que exiten N ambulancias en servicio
realizar una algoritmo que dad la información necesaria, informe las coordenadas de la ambulancia más cercana a la emergencia, cabe aclarar que las coordenadas son en el plano cartesiano y son en POR y Y como por ejemplo (0,2) (4,5) etc...

1 Respuesta

Respuesta
1
Te pongo una posible solución. Primero implementé una clase para gestionar una coordenada, para que sea más sencillo:
/**
 * Clase que nos permite representar una coordenada
 *
 * @author gomecan
 * @version 0.1
 */
public class Coordenada {
    private int x = 0;
    private int y = 0;
    public Coordenada(final int x, final int y) {
        this.x = x;
        this.y = y;
    }
    // --- getters && setters
    public int getX() {
        return this.x;
    }
    public void setX(final int x) {
        this.x = x;
    }
    public int getY() {
        return this.y;
    }
    public void setY(final int y) {
        this.y = y;
    }
}

Y luego una clase que genera las coordenadas de ambulancias y una emergencia y aplica un algoritmo para averiguar qué ambulancia está más cerca:
/**
 *    Clase que nos permite indicar qué ambulacina se encuentra más cercana
 * al punto indicado
 *
 * @author gomecan
 * @version 0.1
 */
public class Organizador {
    public static void main(final String[] args) {
        // Indicamos las situaciones de las ambulancias y la emergencia
        final List<Coordenada> ambulancias = new ArrayList<Coordenada>();
        final Coordenada emergencia = new Coordenada(5, 5);
        ambulancias.add(new Coordenada(0, 0));
        ambulancias.add(new Coordenada(3, 4));
        ambulancias.add(new Coordenada(4, 4));
        final Coordenada seleccionada = seleccionar(ambulancias, emergencia);
        System.out.println("Coordenadas de la ambulancia seleccionada: (" + seleccionada.getX() + " , " + seleccionada.getY() + ")");
    }
    /**
     * Devuelve las coordenadas de la ambulancia más cercana a la emergencia
     *
     * @param ambulancias
     * @param emergencia
     * @return
     */
    public static Coordenada seleccionar(final List<Coordenada> ambulancias, final Coordenada emergencia){
        final double distancia = Double.MAX_VALUE;
        Coordenada seleccionada = null;
        for (final Coordenada ambulancia : ambulancias){
            // Calculamos la distancia con el teorema de Pitágoras
            final int cateto1 = Math.max(ambulancia.getX(), emergencia.getX()) - Math.min(ambulancia.getX(), emergencia.getX());
            final int cateto2 = Math.max(ambulancia.getY(), emergencia.getY()) - Math.min(ambulancia.getY(), emergencia.getY());
            final double sumaCatetos = Math.pow(cateto1, 2) + Math.pow(cateto2, 2);
            double distanciaActual = Math.sqrt(sumaCatetos);
            if (distanciaActual < distancia){
                distanciaActual = distancia;
                seleccionada = ambulancia;
            }
        }
        return seleccionada;
    }
}
Muchas gracias
Espero algún día saber tanto
Pero quisiera saber si tienes una forma más sencilla de hacer el algoritmo
Yo utilizo esto para todos mis algoritmos
import java.io.*;
public abstract class LeerVariable
{
 private static InputStreamReader isr = new InputStreamReader(System.in);
 private static BufferedReader br = new BufferedReader(isr);
 //Método para leer cadenas de texto
 public static String leerTexto(String mensaje)
 {
  String texto = "";
  try
  {
   System.out.print(mensaje);
   texto = br.readLine();
  }
  catch (Exception e)
  {
   System.out.println("Error " + e);
  }
  return texto;
 }
 //Método para leer números enteros
 public static int leerEntero(String mensaje)
 {
  int num = 0;
  try
  {
   System.out.print(mensaje);
   num = Integer.parseInt(br.readLine());
  }
  catch (Exception e)
  {
   System.out.println("Error " + e);
  }
  return num;
 }
 //Método para leer números reales
 public static double leerReal(String mensaje)
 {
  double num = 0;
  try
  {
   System.out.print(mensaje);
   Double d = new Double(br.readLine());
   num = d.doubleValue();
  }
  catch (Exception e)
  {
   System.out.println("Error " + e);
  }
  return num;
 }
}
y empiezo mis algoritmos asi
public class emergencia{
public static void main (String Args[]){
Espero me podas colaborar...
Te paso el método main haciendo uso de tus clases:
public static void main(final String[] args) {
        // Leer coordandas de la emergencia
        final int emergenciaX = LeerVariable.leerEntero("Inserte la coordenada X de la emergencia: ");
        final int emergenciaY = LeerVariable.leerEntero("Inserte la coordenada Y de la emergencia: ");
        // Leer el número de ambulancias disponibles
        final int numAmb = LeerVariable.leerEntero("Inserte el número de ambulancias disponibles: ");
        // Leer las coordendas de cada ambulancia
        final int[] ambulanciasX = new int[numAmb];
        final int[] ambulanciasY = new int[numAmb];
        for (int i=0; i<numAmb; i++){
            ambulanciasX = LeerVariable.leerEntero("Inserte la coordenada X de la ambulancia (" + (i + 1) + "): ");
            ambulanciasY = LeerVariable.leerEntero("Inserte la coordenada Y de la ambulancia (" + (i + 1) + "): ");
        }
        // Indicar qué ambulancia está más cerca
        final double distancia = Double.MAX_VALUE;
        int posAmb = -1;
        for (int i=0; i<ambulanciasX.length; i++){
            // Calculamos la distancia con el teorema de Pitágoras
            final int cateto1 = Math.max(ambulanciasX, emergenciaX) - Math.min(ambulanciasX, emergenciaX);
            final int cateto2 = Math.max(ambulanciasY, emergenciaY) - Math.min(ambulanciasY, emergenciaY);
            final double sumaCatetos = Math.pow(cateto1, 2) + Math.pow(cateto2, 2);
            double distanciaActual = Math.sqrt(sumaCatetos);
            if (distanciaActual < distancia){
                distanciaActual = distancia;
                posAmb = i;
            }
        }
        System.out.println("La ambulancia más cercana se encuentra en las coordenadas (" + ambulanciasX[posAmb] + "," + ambulanciasY[posAmb] + ")");
    }
sos que calidad... excelente muchas gracias por este gran aporte... de nuevo gracias... me has sacado de un gran lio que tenia...
Te daré la mejor calificación

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas