package it.unicam.cs.asdl1819.queens;

import java.util.ArrayList;
import java.util.List;

/**
 * Risolutore del problema delle 8 regine.
 * 
 * @author Luca Tesei
 *
 */
public class EightQueensSolver {

    // Scacchiera privata di questo solver
    private Scacchiera s;
    private List<PositionedQueen> listaRegine = new ArrayList<PositionedQueen>();

    /**
     * Crea un nuovo solver
     */
    public EightQueensSolver() {
        s = new Scacchiera();
    }

    /**
     * Restituisce la prima soluzione trovata tramite la strategia di ricerca
     * con backtracking.
     * 
     * @return la prima soluzione sottoforma di lista di 8 regine posizionate
     *         nella scacchiera
     */
    public List<PositionedQueen> firstSolution() {
    	if (ricerca(s, 0) == false) return null;
        return listaRegine; 
    }

    /**
     * Restituisce la soluzione successiva all'ultima trovata tramite la
     * strategia di ricerca con backtracking.
     * 
     * @return la prossima soluzione sottoforma di lista di 8 regine posizionate
     *         nella scacchiera oppure null se non ci sono piÃ¹ soluzioni.
     */
    public List<PositionedQueen> nextSolution() {
    	return null;
    }

    private boolean ricerca(Scacchiera s, int col) { 
        if (col >= 8) return true;
        for (int i = 0; i < 8; i++)  { 
            if (s.isFree(i, col)) { 
                s.putQueen(i, col);
                PositionedQueen regina = new PositionedQueen(i, col);
                listaRegine.add(regina);
                if (ricerca(s, col + 1) == true) return true; 
                s.removeQueen(i, col);
                listaRegine.remove(regina);
            } 
        } 
        return false; 
    } 

}