Tengo que entregar un proyecto a la universidad y solo me falta una función de todo el proyecto. Llevo con ella varios días y no consigo sacarla.
Se trata que el primer algoritmo mira la Sala de la pelicula desde la mitad hacia arriba, y va por cada fila de derecha a izquierda y por ejemplo si yo le meto a la función que quiero 3 butacas, me recomienda 3 butacas que esten juntas y en la misma fila. Por ejemplo si la sala tiene 10 filas y 9 columnas y quiero 3 butacas, me recomendaria que comprara las entradas (6,9),(6,8) y (6,7), en caso de que esas estuvieran ocupadas, seguiria buscando.
Si toda la parte de arriba de la sala estuviera ocupada, con el segundo algoritmo, miraria la parte inferior de la sala.
Eso es lo que yo he entendido.
Actualmente llevo hecho lo siguiente de la función y no se como seguir:
Código
// recomendarButacasContiguas: método que dados un número N de butacas, devuelve un objeto de // tipo ButacasContiguas que contiene la fila y la columna de la butaca recomendaba con menor // número de columna, y el número de butacas solicitadas. El algoritmo para obtener las butacas // recomendadas es el siguiente: // // 1. Se buscan las primeras N butacas contiguas libres empezando por la fila (N_FILAS+1)/2 + 1 // y acabando en la fila N_FILAS. Cada fila se recorre empezando por la columna // N_COLUMNAS y acabando en la columna 1. // 2. Si en el paso anterior no se encuentran N butacas contiguas libres, se buscan las primeras N // butacas contiguas libres empezando por la fila (N_FILAS+1)/2 y acabando en la fila 1. // Cada fila se recorre empezando por la columna N_COLUMNAS y acabando en la columna // 1. // Si no existen N butacas libres contiguas en la sala para la propia sesión, se devuelve null. Por // ejemplo, si tomamos la sala de la figura 2 y buscamos 3 butacas contiguas libres, este algoritmo // devolverá las butacas (4, 3), (4, 4) y (4, 5). public ButacasContiguas recomendarButacasContiguas(int noButacas){ int n_filas=this.estadoAsientos.length; int n_columnas=this.estadoAsientos[0].length; int fila=0; int columna=0; boolean compraFinalizada = false; int asientosRequeridos=0; ButacasContiguas resultado = new ButacasContiguas (fila, columna, noButacas); //1er Algoritmo, recorre las filas desde (n_filas+1)/2+1 HASTA la N_FILAS for(int i=((n_filas+1)/2)+1; i<n_filas && !compraFinalizada &&asientosRequeridos<noButacas;i++){ for(int j=n_columnas+1; j>=0 &&!compraFinalizada &&asientosRequeridos<noButacas; j--){ if(asientosRequeridos<noButacas){ //Hasta llegar al Numero de butacas que se compra if(estadoAsientos[i][j]==0){ //Si un asiento esta vacio asientosRequeridos++; //Se incrementa en 1 } else if(estadoAsientos[i][j]!=0){ //Si no esta libre asientosRequeridos=0; //No se incrementa y se sigue buscando } }else if(asientosRequeridos==noButacas){ //Si ya se han encontrado todos los asientos compraFinalizada=true; } } } //2do Algoritmo, recorre las filas desde (n_filas+1)/1 HASTA la Fila1 for(int i=(n_filas+1)/2; i>0 && !compraFinalizada && asientosRequeridos<noButacas ; i--){ asientosRequeridos=0; for(int j=n_columnas+1; j>0 && !compraFinalizada && asientosRequeridos<noButacas ; j--){ if(asientosRequeridos<noButacas){ if(estadoAsientos[i][j]==0){ asientosRequeridos++; }else if(estadoAsientos[i][j]!=0){ asientosRequeridos=0; } }else if(asientosRequeridos==noButacas){ compraFinalizada=true; } } } return resultado; }
El objeto ButacasContiguas (no puedo modificar nada de este objeto) tiene los siguientes atributos y metodos):
Código
package cine; public class ButacasContiguas { private int fila, columna, noButacas; public ButacasContiguas(int fila, int columna, int noButacas) { this.fila = fila; this.columna = columna; this.noButacas = noButacas; } public int getFila() { return fila; } public int getColumna() { return columna; } public int getNoButacas() { return noButacas; } }
Y los atributos de Sesion.java que es la clase en la que se tiene que construir la funcion de RecomendarButacasContiguas son:
Código
private int asientosDisponibles; //es un entero que indica el número de asientos disponibles en la propia sesión. // es un entero que se incrementa cada vez que se realiza una venta de entradas para la // propia sesión. Se utiliza para generar identificadores de venta diferentes para cada compra. private int sigIdCompra; // es una matriz de enteros con las mismas dimensiones que la sala asociada a la // propia sesión, en la que se representan las butacas compradas y las disponibles para la propia // sesión. Si una butaca en la posición (i, j) está disponible, se guarda un valor 0, y en caso // contrario, se guarda el identificador de venta asociado a la butaca. Como en una venta se puede // comprar más de una butaca, podría suceder que en la matriz haya varios identificadores de // ventas iguales en posiciones contiguas private int [][] estadoAsientos;
Espero que puedan ayudarme, gracias