
public class Main {

	// Questa funzione calcola il minimo secondo una relazione
	// di ordinamento arbitraria, che viene definita passando
	// un "oggetto comparatore" c.
	static Punto minimo(Punto[] v, Comparatore c) {
		Punto min = v[0];
		int i;
		for (i=1 ; i<v.length ; i++) {
			if (c.confronta(v[i], min) < 0) {
				min = v[i];
			}
		}
		return min;
	}
	
	public static void main(String[] args) {
		Punto[] v = new Punto[5];
		v[0] = new Punto(1,5);
		v[1] = new Punto(2,3);
		v[2] = new Punto(4,4);
		v[3] = new Punto(3,1);
		v[4] = new Punto(5,1);
		
		// Passo a minimo() un comparatore che confronta prima la x
		Punto p = minimo(v, new ComparaPrimaX());
		System.out.println("Il punto minimo secondo x è (" + p.x + ", " + p.y + ")");
		// Stampa (1,5)
		
		// Stesso minimo ma secondo un comparatore diverso
		p = minimo(v, new ComparaPrimaY());
		System.out.println("Il punto minimo secondo y è (" + p.x + ", " + p.y + ")");
		// Stampa (3,1) visto che a parità di y si guarda anche x
	}

}
