class Regine{ public static void main( String[] aa ){ System.out.println( scrivi( mettiRegine( Leggi.leggiInt( ) ) ) ); } private static String scrivi( int[] soluz ){ if (soluz == null ) return " Non c'e` soluzione"; String acc = ""; for ( int e : soluz ) acc += (e + " "); return acc; } public static int[ ] mettiRegine( int n ){ // n e` il numero di regine che vogliamo mettere // su una scacchiera n X n in maniera che nessuna // coppia di regine si tengano sotto scacco // Scartiamo, per scelta 'pruning', // la rappresentazione // Boolean[][] sc = // new boolean[ n ][ n ]; int[ ] sc = // scacchiera new int[ n ]; // caso tipico n = 8 // i numeri r da mettere in sc // saranno compresi fra 0..n-1 if ( mettiRegina( 0, sc ) ) return sc ; return null; } private static boolean mettiRegina( int c, // Prova a collocare le regine da quella che sta in colonna // c fino all'ultima. int[ ] sc ){ int n = sc.length; // Qui mi preoccupo di sistemare una regina sulla // colonna numero i. Faccio la scelta locale, // scartando cio` che entra in conflitto con // scelte fatte a monte e poi delego un'altra // mettiRegina a completare i lavori. if( c == n ) // siamo alla fine della fiera return true; // siamo a buon fine for( int r=0; r