public class QUEENPROBLEM
{
int n = 8;
int[] feld;
int zeile = 0;
int spalte = 0;
int lösungsanz;
public QUEENPROBLEM()
{
feld = new int[n];
}
public void main()
{
gibWert();
setzeDame(0, 0);
System.out.println("Lösungen für "+n+"*"+n+" Schachfeld: "+lösungsanz);
}
public void setzeDame(int zeile, int spalte)
{
if( zeile == n )
{
lösungsanz++;
System.out.println("Anzahl: "+lösungsanz);
System.out.println();
for( int i=0; i<n; i++)
{
System.out.println("feld["+i+"]= "+feld[i]);
}
int i=1;
if( zeile>0 )
{
while( feld[zeile-i]==n-i && (zeile-i)>0 )
{
i++;
}
setzeDame( zeile-i, feld[zeile-1]+1 );
}
}
else
{
if( zeile < n )
{
feld[zeile] = spalte;
}
if( istBedroht(zeile, spalte) == true )
{
if( spalte < n-1 )
{
setzeDame(zeile, spalte+1);
}
if( spalte == (n-1) )
{
if( feld[zeile-1]==n-1 )
{
if( zeile >= 2 )
{
int i=2;
while( feld[zeile-i]==n-i && (zeile-i)>0 )
{
i++;
}
setzeDame( zeile-i, feld[zeile-i]+1);
}
}
else
{
setzeDame( zeile-1, feld[zeile-1]+1 );
}
}
}
else
{
setzeDame(zeile+1, 0 );
}
}
}
public boolean istBedroht(int zeile, int spalte)
{
boolean bedroht = false;
for( int i=0; i<zeile; i++ )
{
if( feld[i]==spalte || feld[i]-spalte==i-zeile || feld[i]-spalte==zeile-i )
// senkrecht schräg links oben schräg rechts oben
{
bedroht = true;
}
}
return bedroht;
}
public void gibWert()
{
for( int i=0; i<n; i++ )
{
feld[i] = n+1;
}
}
}