Springer auf dem Schachbrett (Felder)
Der Anwender wird vom Programm nach einer Position auf dem Schachbrett gefragt (z. B. "c1"). Ab dieser Startposition berechnet nun das Programm für jedes andere Feld (= Zielposition) die Anzahl Züge, die der Springer minimal benötigt, um diese Zielposition zu erreichen. Geben Sie das Resultat als Tabelle aus.
Bemerkung: An der Startposition des Springers steht bei der Ausgabe natürlich eine Null.
0 Kommentare
2 Lösung(en)
public class Main {
public static void main(String[] args) {
// Initialisierung des Schachbretts mit je 2 Randfeldern
// Es geht dann nie ein Sprung ins "Offside", was beim
// Springen etwas Arbeit spart
int i, j;
int[][] f = new int[12][12];
i = 0;
while( i < 12 ) {
j = 0;
while( j < 12 ) {
// Jedes Feld zunächst mit 99 füllen.
f[i][j] = 99;
j = j + 1;
}
i = i + 1;
}
int curDist = 0;
boolean done = false;
f[2][4] = 0; // Das Startfeld
while( !done ) {
done = true; // Vielleicht schon fertig?
i = 2;
while ( i < 10 ) {
j = 2;
while( j < 10 ) {
// Für jedes der gültigen 64 Felder...
if ( f[i][j] == curDist ) {
// neuste Ausgangsposition gefunden
done = false; // und deshalb noch nicht fertig.
if ( f[i+2][j+1] > curDist ) f[i+2][j+1] = curDist+1;
if ( f[i-2][j+1] > curDist ) f[i-2][j+1] = curDist+1;
if ( f[i+2][j-1] > curDist ) f[i+2][j-1] = curDist+1;
if ( f[i-2][j-1] > curDist ) f[i-2][j-1] = curDist+1;
if ( f[i+1][j+2] > curDist ) f[i+1][j+2] = curDist+1;
if ( f[i-1][j+2] > curDist ) f[i-1][j+2] = curDist+1;
if ( f[i+1][j-2] > curDist ) f[i+1][j-2] = curDist+1;
if ( f[i-1][j-2] > curDist ) f[i-1][j-2] = curDist+1;
}
j = j + 1;
}
i = i + 1;
}
curDist = curDist + 1;
}
// Ausgabe des Spielfeldes
i = 2;
while( i < 10 ) {
j = 2;
while( j < 10 ) {
System.out.printf( "%2d ", f[i][j] );
j = j + 1;
}
System.out.println( );
i = i + 1;
}
}
}
// Lösung Dammer, 13.8.2011
// das Konsolenfenster muss geöffnet sein
import java.util.Scanner;
class SpringerAufSchachbrettDm{
Scanner sc=new Scanner(System.in);
int n=8; // für 8x8 Schachbrett
void los()
{
// Startfeld eingeben
System.out.println("Geben Sie ein Startfeld ein, a1 bis h8");
String input=sc.next();
System.out.println();
int x0=(int)(input.charAt(0)-'a'); // Anfangsspalte 0..7
int y0=(int)(input.charAt(1)-'0'-1); // Anfangsreihe 0..7
// Array initialisieren
int[][] feld=new int[n][n];
feld[x0][y0]=1; // 0 Feld unbetreten, 1 im 1. Schritt
// dynamisch die Entfernung aller Felder vom Anfangsfeld bestimmen
int counter=1; // Anzahl schon besuchter Felder
for(int suchNummer=1;suchNummer<n*n && counter<n*n; suchNummer++){ // welche Sprünge sind von "1" möglich..
for (int x=0; x<n; x++)
for (int y=0; y<n; y++){
if (feld[x][y]==suchNummer){
if (x<n-1 && y<n-2 && feld[x+1][y+2]==0) {feld[x+1][y+2]=suchNummer+1;counter++;} // oben rechts
if (x<n-2 && y<n-1 && feld[x+2][y+1]==0) {feld[x+2][y+1]=suchNummer+1;counter++;} // rechts oben
if (x<n-2 && y>0 && feld[x+2][y-1]==0) {feld[x+2][y-1]=suchNummer+1;counter++;} // rechts unten
if (x<n-1 && y>1 && feld[x+1][y-2]==0) {feld[x+1][y-2]=suchNummer+1;counter++;} // unten rechts
if (x>0 && y>1 && feld[x-1][y-2]==0) {feld[x-1][y-2]=suchNummer+1;counter++;} // unten links
if (x>1 && y>0 && feld[x-2][y-1]==0) {feld[x-2][y-1]=suchNummer+1;counter++;} // links unten
if (x>1 && y<n-1 && feld[x-2][y+1]==0) {feld[x-2][y+1]=suchNummer+1;counter++;} // links oben
if (x>0 && y<n-2 && feld[x-1][y+2]==0) {feld[x-1][y+2]=suchNummer+1;counter++;} // oben links
}
}
}
// Ausgabe
for (int y=n-1;y>=0; y--) {
for (int x=0; x<n; x++) System.out.print(feld[x][y]-1+" ");
System.out.println();
}
}
public static void main(String[] args)
{
new SpringerAufSchachbrettDm().los();
}
}
Lösung von: Name nicht veröffentlicht
Verifikation/Checksumme:
Beispiel auf dem 4x4 Brett:
\begin{displaymath} \left( \begin{array}{cccc} 3 & 0 & 3 & 2 \\ 2 & 3 & 2 & 1 \\ 1 & 2 & 1 & 4 \\ 2 & 3 & 2 & 3 \\ \end{array} \right) \end{displaymath}
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 2 |
Schwierigkeit: | k.A. |
Webcode: | o9zn-pwdy |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |